Description
acm班的成绩出来的,要求你按照分数的高低进行降序排序,之后按照输入顺序输出每个人的排名。
Input
输入一个n(n<=1000),表示人数,接下来的一行n个正整数,代表每一人的分数(小于等于1000)。
Output
输出每一个人的排名。分数相同的按照输入先后排序。
C++自带sort函数不稳定,无法保证先输入的在前,故用冒泡排序,在遇到相同的元素时不交换顺序,以保证先输入的在前。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct student{
int score;
int s;
int p;
};
bool cmp1(student stu1, student stu2){
return stu1.s<stu2.s;
}
int main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin>>n;
vector<student> stu(n);
for(int i=0;i<n;i++){
cin>>stu[i].score;
stu[i].s=i;
}
for(int i=0;i<n;i++){
for(int j=0;j<n-i-1;j++){
if(stu[j].score<stu[j+1].score)
swap(stu[j], stu[j+1]);
}
}
for(int i=0;i<n;i++){
stu[i].p=i+1;
}
sort(stu.begin(), stu.end(), cmp1);
for(int i=0;i<n;i++){
if(i==0)
cout<<stu[i].p;
else
cout<<' '<<stu[i].p;
}
cout<<'\n';
return 0;
}