计算学生的成绩并进行排名
给定数列{400,201,11, 45,1},数字11重复离散化为{5,4,1 ,3,1}
处理过程 离散、排序、归位
#include <iostream>
using namespace std;
#include <algorithm>
const int N = 10010;
struct data
{
int val;
int id;
}old[N];
int newArr[N];
bool cmp(struct data x, struct data y)
{
return x.val < y.val;
}
void solve()
{
int n;
cin >> n;
for (int i = 1; i <=n; i++)
{
old[i].id = i;
cin >> old[i].val;
}
sort(old + 1, old + n + 1, cmp);
for (int i = 1; i <= n; i++)
{
newArr[old[i].id] = i;
if (old[i].val == old[i - 1].val)
newArr[old[i].id] = newArr[old[i - 1].id];
}
for (int i = 1; i <= n; i++)
{
cout << newArr[i] << ' ';
}
}
signed main()
{
ios::sync_with_stdio;
cin.tie(0);
cout.tie(0);
int num = 1;
while (num--)
{
solve();
}
}