题目描述
在选美大奖赛的半决赛现场,有n名选手(2
输入
选手数量:7
选手得分:5 3 4 7 3 5 6
输出
选手的排名:3 5 4 1 5 3 2
样例代码
#include <iostream>
using namespace std;
void exchange2(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
int main(){
int n;
cin>>n;
int *pep=new int[n];
int *forRank=new int[n];
int *collect=new int[n];
for (int i=0;i<n;i++) {
cin>>pep[i];
forRank[i]=pep[i];
}
for (int i=0;i<n;i++)
for (int j=i+1;j<n;j++){
if (forRank[i]<forRank[j]) exchange2(forRank[i],forRank[j]);
}
int pos=0;
for (int k=0;k<n;k++){
if (forRank[k]>forRank[k+1]){
collect[pos]=forRank[k];
pos++;
}
else if (k==n-1) collect[pos]=forRank[k];
}
for (int i=0;i<n;i++){
for (int j=0;j<=pos;j++){
if (pep[i]==collect[j]){
//cout<<pep[i]<<"="<<collect[j]<<" i="<<i<<" ;j="<<j<<endl;
pep[i]=j+1;
break;
}
}
}
for (int k=0;k<n;k++) {cout<<pep[k];if (k<n-1) cout<<" ";}
return 0;
}
//提示:本题的关键在于如何处理同分数的选手排名问题