成绩排序
成绩排序
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;
}
}
}

查看1道真题和解析