成绩排序
成绩排序
http://www.nowcoder.com/questionTerminal/8e400fd9905747e4acc2aeed7240978b
例示中“{}”括住的部分是原题目中bug的一点,在这里我卡了一下,大家可以参考。
题目描述
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。
例示:
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代表从低到高
题解:
#include <bits/stdc++.h> using namespace std; bool cmp0(vector<int> a, vector<int> b){ if(a[0]==b[0]) //如果有几个人的分数是一样的,先录入的在前 return a[1]<b[1]; else return a[0]>b[0]; //分数不同,则正常看要求排序 } bool cmp1(vector<int> a, vector<int> b){ if(a[0]==b[0]) return a[1]<b[1]; else return a[0]<b[0]; } int main(){ ios::sync_with_stdio(false); int n; while(cin>>n){ int flag; cin >>flag; vector<string> name(n); vector<vector<int>> score(n, vector<int>(2)); //建立一个包含录入顺序和分数的二维数组,行数为人数,列数为2 for(int i=0; i<n; i++){ cin >> name[i]; score[i][1]=i; cin >> score[i][0]; } if(flag==0){ sort(score.begin(), score.end(), cmp0); for(int i=0; i<n; i++) cout << name[score[i][1]] << " " <<score[i][0] <<endl; } else{ sort(score.begin(), score.end(), cmp1); for(int i=0; i<n; i++) cout << name[score[i][1]] << " " <<score[i][0] <<endl; } } }