题目描述
给定n个考生的分数,将它们从高到低排序,然后输出每个分数对应的排名。
注:
- 排名 = 高于当前分数的考生个数 + 1
- 分数相同时排名相同
输入描述
第一行一个整数n(1≤n≤1000),表示分数的个数;
第二行共n个用空格隔开的整数(0≤score≤100),表示n个考生的分数。
输出描述
共n行,每行为一个分数和对应的排名,用空格隔开。
样例1
输入
5
92 90 100 90 87
输出
100 1
92 2
90 3
90 3
87 5
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
int score[n]; //记录分数数组
for(int i=0;i<n;i++){
cin>>score[i];
}
sort(score,score+n,greater<int>()); //排序
int so[n]; //定义排名数组
int count=1; //初始化名次
int i=0;
while(i<n){
so[i]=count;
int j=1; //记录有几个相同的
while(score[i]==score[i+j]&&i+j<n){
so[i+j]=count;
j++;
}
i=count+j-1; //更新i
count+=j; //更新count
}
for(int i=0;i<n;i++){
cout<<score[i]<<" "<<so[i]<<endl;
}
return 0;
}