在我们参加的各种竞赛中,允许并列的排名方式是经常遇到的。
例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第一名,50分的两名选手均为第二名,30分的选手为第四名。
请编写一个程序,计算每个选手在这种排名方式之下的名次(分数高的选手排前面)。
输入格式
第一行为一个整数n,表示参赛的选手数,1<=n<=1000,第二行为n个整数,表示每位选手的成绩。
输出格式
一行,表示每位选手的名次。
输入样例
4
50 80 50 30
输出样例
2 1 2 4
谁能把下面那个程序改成符合题意的?
#include<bits/stdc++.h>
using namespace std;
int a,b[1000],c;
int main()
{
cin>>a;
for(int i=1;i<=a;i++)
cin>>b[i];
cin>>c;
for(int i=1;i<=a;i++)
for(int j=i;j<=a;j++)
if(b[i]<b[j])
swap(b[i],b[j]);
for(int i=1;i<=a;i++)
{
if(b[i]==c)
{
cout<<i;
return 0;
}
}
exit;
}
#include <iostream>
using namespace std;
int main() {
int i,n,arr[1001],s[101]= {0};
cin>>n;
for(i=0; i<n; i++) {
cin>>arr[i];
s[arr[i]]++;
}
int tmp,cur=1;
for(i=100; i>0; --i) {
if(s[i]!=0) {
tmp=s[i];
s[i]=cur;
cur+=tmp;
}
}
for(i=0; i<n-1; i++)
cout<<s[arr[i]]<<" ";
cout<<s[arr[i]]<<endl;
return 0;
}