🎉️ 程序设计 -- 允许并列的排名2


在我们参加的各种竞赛中,允许并列的排名方式是经常遇到的。

例如有四名选手的成绩分别为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;
}