【问题描述】
输入一行整数,输出每个整数排序后的位置
【输入格式】
第一行,整数n(0<n<=9999);
第二行,n个不同的整数。
【输入格式】
依次输出每个数的排名
【输入样例】
5
8 2 6 9 4
【输出样例】
4 1 3 5 2
【代码】
#include<bits/stdc++.h>
using namespace std;
struct nade{
int dets;//数值
int rank;//排名
int index;}a[10000];//下标
bool cmp1(nade x,nade y){
return x.dets<y.dets;}
bool cmp2(nade x,nade y){
return x.index<y.index;}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].dets;
a[i].index=i;
}
//根据dets排序,求排名rank
sort(a,a+n,cmp1);
for(int i=0;i<n;i++){
a[i].rank=i+1;
}
//根据index排序,回到原数据次序;
sort(a,a+n,cmp2);
for(int i=0;i<n;i++){
cout<<a[i].rank<<' ';
}
return 0;
}