题目
思路
思路在于建立一个结构体来表示每个选手的分数与排名,每个选手的排名初始化为1,然后需要一个数组用于去重(用set的话内存比较多比较慢),再逐个遍历比较,分数小的就名次+1即可。
AC代码
#include <bits/stdc++.h>
using namespace std;
int arr[110], arr1[110], n;
struct ctor {
int score;
int grade;
} gamer[110];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d", &arr[i]);
gamer[i].score = arr[i];
gamer[i].grade = 1; //全部初始化为1
}
//去重
int len = 1;
//定义一个数组arr1用于去重
for (int i = 1; i <= n; ++i) {
bool flag = true;
for (int j = 1; j <= i; ++j) {
if (arr1[j] == arr[i]) {
flag = false;
break;
}
}
if (flag)
arr1[len++] = arr[i];
}
//定义一个sum 如果arr1[j]>arr[i]的话说明有比他大的要+1
for (int i = 1; i <= n; ++i) {
int sum = 0;
for (int j = 1; j <= len; ++j) {
if (arr1[j] > arr[i]) {
sum++;
}
}
gamer[i].grade += sum;
}
for (int i = 1; i <= n; ++i) {
cout << gamer[i].grade << " ";
}
}