离散化数排序后的编号(rank值)
题目描述:在使用离散化方法编程时,通常要知道每个数排序后的编号(rank值),相同的数对应一个编号。
输入格式:
第一行,一个整数N,范围在[1…1000];第2行,有N个整数,每个数都是int范围的。注意:可能有相同的整数。
输出格式:
依次输出每个数的排名
输入
5
8 2 6 9 2
输出
3 1 2 4 1
代码
#include "stdio.h"
struct num
{ int data;
int data2;
int rank;
};
int main()
{
int n,i,j,k;
int temp=1;
scanf("%d",&n);
struct num a[10000];
for(i=0;i<n;i++)
{
scanf("%d",&a[i].data);
a[i].data2=a[i].data;
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{ if(a[i].data2==a[j].data2)
{
a[j].data2=-1;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i].data>a[j].data && a[j].data2!=-1)
{
temp++;
}
}
a[i].rank=temp;
temp=1;
}
for(i=0;i<n;i++)
{
printf("%d",a[i].rank);
}
}