【算法竞赛宝典】排名次
- 题目描述
- 代码展示
- 代码讲解
题目描述
代码展示
//求名次
#include <iostream>
using namespace std;
#define n 10000
int i, j, mingci;
int a[n + 1];
int main() {
int m = 0;
cin >> m;
for (i = 1; i <= m; i++)
cin >> a[i];
for (i = 1; i <= m; i++) {
mingci = 1;//假设第i位同学是第1名
for (j = 1; j <= m; j++)//与所有同学比较,包括自己
if (a[j] > a[i])//如有成绩比自己高的,名次加1
mingci = mingci + 1;
cout << a[i] << ' ' << mingci << endl;
}
return 0;
}
代码讲解
这段代码的主要思路和关键步骤如下:
-
首先,从输入中获取同学的数量
m
。 -
然后,使用一个循环读取每个同学的成绩,将这些成绩存储在数组
a
中。 -
接下来,通过嵌套循环遍历每个同学,对于每个同学,遍历所有同学,包括自己,以比较其成绩与其他同学的成绩。
-
如果发现有其他同学的成绩比当前同学高,就增加当前同学的名次。
-
最后,输出每个同学的成绩和名次。
总的思路是通过比较每个同学的成绩与其他同学的成绩来计算名次,然后输出结果。这是一个基本的名次计算方法,但它在效率上可能不够高,因为它对每个同学都进行了多次比较,可能会在大规模数据下变得缓慢。