排序与查找

2021-03-04 10:29

阅读:633

标签:城市   clear   namespace   str   des   col   abc   排队   判断   

1.排序

KY210 排序

题目描述

对输入的n个数进行排序并输出。

输入描述:

输入的第一行包括一个整数n(1 下来的一行包括n个整数。

输出描述:

可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。
每组测试数据的结果占一行。

输入

4
1 4 3 2

输出

1 2 3 4 

代码

#include 
#include 
#include 

using  namespace std;

const int MAXN = 100;

int arr[MAXN];

int main(){
    int n;
    while (scanf("%d", &n) != EOF){
        for(int i = 0; i 

KY9 成绩排序

题目描述

用一维数组存储学号和成绩,然后,按成绩排序输出。

输入描述:

输入第一行包括一个整数N(1 接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。

输出描述:

按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。

输入

3
1 90
2 87
3 92

输出

2 87
1 90
3 92

代码

#include 
#include 
#include 

using  namespace std;

struct Student{
    int number;
    int score;
};

const int MAXN = 100;

Student arr[MAXN];

//按照学号升序和成绩升序的比较函数
bool Compare(Student x, Student y){
    if(x.score == y.score){
        return x.number 

KY2 成绩排序

题目描述

查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。

示例:
jack 70
peter 96
Tom 70
smith 67

从高到低 成绩
peter 96
jack 70
Tom 70
smith 67

从低到高

smith 67
jack 70
Tom 70
peter 96

输入描述:

输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开。

输出描述:

按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

输入

3
0
fang 90
yang 50
ning 70

输出

fang 90
ning 70
yang 50

代码

#include 
#include 
#include 

using namespace std;

struct Student{
    string name;
    int score;
    int order;
};

bool CompareDescending(Student x, Student y){
    if(x.score == y.score){
        return x.order  y.score;
    }
}

bool CompareAscending(Student x, Student y){
    if(x.score == y.score){
        return x.order > stu[i].name >> stu[i].score;
            stu[i].order = i;
        }
        if (type) {
          sort(stu,stu+n,CompareAscending);
        }
        else {//为0就降序输出
             sort(stu,stu+n,CompareDescending);
        }
        for(int i=0; i 

KY211 特殊排序

题目描述

输入一系列整数,将其中最大的数挑出(如果有多个,则挑出一个即可),并将剩下的数进行排序,如果无剩余的数,则输出-1。

输入描述:

输入第一行包括1个整数N,1 接下来的一行有N个整数。

输出描述:

可能有多组测试数据,对于每组数据,
第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。
第二行将排序的结果输出。

输入

4
1 3 4 2

输出

4
1 2 3

代码

#include 
#include 

using namespace std;

const int MAXN = 1001;

int arr[MAXN];

int main(){
    int n;
    while(scanf("%d", &n) != EOF){
        int i;
        for(int i = 0; i 

KY67 整数奇偶排序

题目描述

输入10个整数,彼此以空格分隔。重新排序以后输出(也按空格分隔),要求: 1.先输出其中的奇数,并按从大到小排列; 2.然后输出其中的偶数,并按从小到大排列。

输入描述:

任意排序的10个整数(0~100),彼此以空格分隔。

输出描述:

可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔。

  1. 测试数据可能有很多组,请使用while(cin>>a[0]>>a[1]>>...>>a[9])类似的做法来实现;
  2. 输入数据随机,有可能相等。

输入

4 7 3 13 11 12 0 47 34 98

输出

47 13 11 7 3 0 4 12 34 98

代码

#include
#include
#include

using namespace std; 

bool Compare(int x,int y){
    return x>y;
} 

int main(){
    vector a(10);
    while(cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]>>a[8]>>a[9]){
        sort(a.begin(),a.end());
        vector odd;
        vector even;
        for(int i=0;i=1){
            cout

KY37 小白鼠排队

题目描述

N只小白鼠(1

输入描述:

多案例输入,每个案例的输入第一行为一个整数N,表示小白鼠的数目。
下面有N行,每行是一只白鼠的信息。第一个为不大于100的正整数,表示白鼠的重量,;第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过10个字符。

注意:白鼠的重量各不相同。

输出描述:

每个案例按照白鼠的重量从大到小的顺序输出白鼠的帽子颜色。

输入

3
30 red
50 blue
40 green

输出

blue
green
red

代码

#include
#include
#include

using namespace std;

const int MAXN = 100;

struct Mice
{
    int weight;
    string color;
};

bool Compare(Mice x, Mice y)
{
    return x.weight > y.weight;
}

Mice mice[MAXN];

int main()
{

    int n;
    while(scanf("%d", &n) != EOF)
    {
        for(int i = 0; i > mice[i].weight >> mice[i].color;
        }
        sort(mice, mice+n,Compare);
        for(int i = 0; i 

KY117 奥运排序问题

题目描述

按要求,给国家进行排名。

输入描述:

有多组数据。
第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。
接下来一行给出M个国家号。

输出描述:

排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例
对每个国家给出最佳排名排名方式 和最终排名
格式为: 排名:排名方式
如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4.
每组数据后加一个空行。

输入

4 4
4 8 1
6 6 2
4 8 2
2 12 4
0 1 2 3
4 2
8 10 1
8 11 2
8 12 3
8 13 4
0 3

输出

1:3
1:1
2:1
1:2

1:1
1:1

代码

#include
#include

using namespace std;

struct country{
    int ID;
    int seq;//最终排列的名次
    int sortWay;//最优排序的方式
    int Seq[4];//1-4不同的排序方式 当前城市的名次
    double goldNum;//金牌数
    double comNum;//奖牌数
    double personNum;//人数
    double goldRatio;//金牌比例
    double comRatio;//奖牌比例
};

const int MAXN=205;//最多不超过200个国家

const int Max=65535;

bool CompareID(country x,country y)
{
    return x.ID  y.goldNum;
}

bool CompareNum(country x,country y)
{
    return x.comNum > y.comNum;
}
bool CompareGoldRatio(country x,country y)
{
    return x.goldRatio > y.goldRatio;
}
bool CompareComRatio(country x,country y)
{
    return x.comRatio > y.comRatio;
}

void sortCountry(country a[],int num)//num代表数组的数量
{

    sort(a,a + num,CompareGoldNum); //按金牌数排名
    for(int i = 0; i a[j].Seq[i])
            {
                a[j].seq=a[j].Seq[i];
                a[j].sortWay=i+1;
            }
        }
    }
    sort(a,a+num,CompareID);
    for(int i=0;i>n>>m)
    {
        country a[MAXN];
        for(int i=0;i>a[i].goldNum>>a[i].comNum>>a[i].personNum;//输入金牌数,奖牌数,人口数
            a[i].ID = i;
            a[i].goldRatio = 0;a[i].comRatio = 0;//先将平均奖牌数和平均金牌数设置为0
            a[i].goldRatio = a[i].goldNum/ a[i].personNum;
            a[i].comRatio = a[i].comNum/a[i].personNum;//一般人口不为0,奖牌数可以为0
            a[i].seq = Max;//一开始先将排名设置为最大
            a[i].sortWay = 0;//一开始的排名方式是0
        }
        country temp[MAXN];//用来存放需要排名的国家
        int Id;
        for(int i = 0; i >Id;
            temp[i]=a[Id];
        }
        sortCountry(temp, m);
        cout

2. 查找

查找涉及的几个基本要素:

  1. 查找空间:也称解空间,就算在查找空间中寻找符合要求的解的过程。
  2. 查找目标:需要一个目标来判断查找空间中的各个元素是否符合要求,以便判断查找活得是否成功。
  3. 查找方法:
    • 线性查找
    • 二分查找
    • 散列查找

KY158 找x

题目描述

输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。

输入描述:

测试数据有多组,输入n(1

输出描述:

对于每组输入,请输出结果。

输入

2
1 3
0

输出

-1

代码

#include 
#include 

using namespace std;

const int MAXN = 200;

int arr[MAXN];

int main(){
    int n;
    while(scanf("%d", &n) != EOF){
        for(int i = 0; i 

KY199 查找

题目描述

输入数组长度 n 输入数组 a[1...n] 输入查找个数m 输入查找数字b[1...m] 输出 YES or NO 查找有则YES 否则NO 。

输入描述:

输入有多组数据。
每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1

输出描述:

如果在n个数组中输出YES否则输出NO。

输入

5
1 5 2 4 3
3
2 5 6

输出

YES
YES
NO

代码

#include 
#include 
#include 

using namespace std;

int const MAXN = 100;

int  arr[MAXN];

bool BinarySearch(int n, int target){
    int left = 0;
    int right = n-1;
    while(left 

KY198 找最小数

题目描述

第一行输入一个数n,1

输入描述:

输入有多组数据。
每组输入n,然后输入n个整数对。

输出描述:

输出最小的整数对。

输入

5  
3 3  
2 2  
5 5  
2 1  
3 6

输出

2 1

代码

#include 
#include 

using namespace std;

struct Number{
    int x;
    int y;
};

const int MAXN = 1001;

Number num[MAXN];

bool Compare(Number a, Number b){
    if( a.x == b.x ){
        return a.y > num[i].x >> num[i].y;
        }         
        sort(num, num + n, Compare);
        cout 

KY54 打印极值点下标

题目描述

在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是i。

输入描述:

第一行是此数组的元素个数k(4

输出描述:

每个案例输出为n行:每行对应于相应数组的所有极值点下标值,下标值之间用空格分隔。

输入

10
10 12 12 11 11 12 23 24 12 12
15
12 12 122 112 222 211 222 221 76 36 31 234 256 76 76 
15
12 14 122 112 222 222 222 221 76 36 31 234 256 76 73

输出

0 7
2 3 4 5 6 10 12
0 2 3 10 12 14

代码

#include 
 
int main(){
    int k,i;
    int num[80];
    while(scanf("%d",&k)!=EOF){
        for(i=0;inum[i-1]&&num[i]>num[i+1])||(num[i]

KY228 找位置

题目描述

对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。

输入描述:

输入包括一个由字母和数字组成的字符串,其长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据,
按照样例输出的格式将字符出现的位置标出。

1、下标从0开始。
2、相同的字母在一行表示出其出现过的位置。

输入

abcaaAB12ab12

输出

a:0,a:3,a:4,a:9
b:1,b:10
1:7,1:11
2:8,2:12

代码

#include
#include
#include
#include

using namespace std;

int main()
{
    map > st;
    vector num,a;
    string str;
    while(cin>>str){
        for(int i = 0; i second;
                if(str[a[i]] == it->first)
                    if(num.size() > 1){
                        for(int j = 0; j first

排序与查找

标签:城市   clear   namespace   str   des   col   abc   排队   判断   

原文地址:https://www.cnblogs.com/zhangzizi/p/14352143.html


评论


亲,登录后才可以留言!