链接:https://www.nowcoder.com/questionTerminal/0383714a1bb749499050d2e0610418b1?toCommentId=4592791
来源:牛客网
 

查找和排序

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

示例:
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(升序)再分别输入他们的名字和成绩,以一个空格隔开


 

输出描述:


 

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

示例1

输入

3
0
fang 90
yang 50
ning 70

输出

fang 90
ning 70
yang 50

链接:https://www.nowcoder.com/questionTerminal/0383714a1bb749499050d2e0610418b1?toCommentId=4592791
来源:牛客网
 

感觉好坑啊,也没人说要永远循环下去呀~· 可能是我读题脑子有问题

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

#include

#include

#include

using namespace std;

struct stu{

    int num;

    int score;

    string name;

};

bool cm1(stu s1,stu s2){

    if(s1.score!=s2.score){

        return s1.score<s2.score;

    }return s1.num<s2.num;

}

bool cm0(stu s1,stu s2){

    if(s1.score!=s2.score){

        return s1.score>s2.score;

    }return s1.num<s2.num;

}

int main(){

 

    int a,b;

    while(cin>>a>>b){

    vector v;

    stu st;

    string name;

    int score;

 

    for(int i=0;i<a;i++){

        cin>>name>>score;

        st.name=name;

        st.score=score;

        st.num=i;

        v.push_back(st);

    }

    if(b==0){

        sort(v.begin(),v.end(),cm0);

    }else{

        sort(v.begin(),v.end(),cm1);

    }

    for(int i=0;i<v.size();i++){

        //cout<<v[i].name<<" "<<v[i].score<<endl;

        printf("%s %d\n",v[i].name.c_str(),v[i].score);

    }

    }

    return 0;

}