查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
示例:
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
解答思路:首先要建立一个结构体存储姓名和分数。由于要动态输入学生的个数,所以要建立一个动态数组(vector <Node> v(n)),
然后就可以编写比较算法进行比较了。代码如下:
#include <iostream> #include <string> #include <vector> using namespace std; struct Node{ string name; int score; }; int main() { int count; int flag; int i; while(cin>>count) { cin>>flag; vector<Node> v(count); for ( i = 0; i<count; i++) { cin >> v[i].name >> v[i].score; } if (flag == 0) { for ( i = 0; i<count - 1; i++) { for (int j = 1; j<count - i; j++) { if (v[j - 1].score<v[j].score) { Node temp; temp = v[j - 1]; v[j - 1] = v[j]; v[j] = temp; } } } } else { for ( i = 0; i<count - 1; i++) { for (int j = 1; j<count - i; j++) { if (v[j - 1].score>v[j].score) { Node temp; temp = v[j - 1]; v[j - 1] = v[j]; v[j] = temp; } } } } for ( i = 0; i<v.size(); i++) { cout << v[i].name << " " << v[i].score << endl; } } return 0; }
第一次在牛客网上写代码,没有什么经验。通过摸索,最后终于编译通过。以下是我编程过程中遇到问题的一些总结:
1、编译结果是“空,有没有循环的多个case”
解决方案:因为要能验证多组数据,所以要在最外层写个while无限循环。
2、vector(动态数组)的使用方法
vector <数据类型> 变量名(数据个数)
变量名.size() //动态数组的大小
如有问题欢迎来讨论。。。。
原文:https://www.cnblogs.com/cmkbk/p/12346037.html