思路:
(1)使用结构体(data,index,rank)
(2)先输入这组数,并存储好下标(编号);
(3)使用sort函数,按照从小到大的顺序排好;存储此时排序的位置(rank)
(4)使用sort函数,按照下标(编号)顺序排好;
(5)依次输出每个数的rank即可。
备注:
sort(a+1,a+n+1,cmp)
cmp为bool型,不用传地址。
参考代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
int data;
int rank;
int index;
}a[10001];
bool cmp1(node x,node y);
bool cmp2(node x,node y);
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].data;
a[i].index=i;
}
sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++)
{
a[i].rank=i;
}
sort(a+1,a+n+1,cmp2);
for(int i=1;i<=n;i++)
{
cout<<a[i].rank<<" ";
}
cout<<endl;
return 0;
}
bool cmp1(node x,node y)
{
return x.data<y.data;
}
bool cmp2(node x,node y)
{
return x.index<y.index;
}
离散化基础。输入一行n个不同的整数,每个数都是Int范围,依次输出每个数的排名。
原文:https://www.cnblogs.com/yue123/p/14251194.html