C++ 编程题:计算学生排名(GESP 三级)
C++ 编程题:计算学生排名(GESP 三级)
描述
期末考试语文成绩出来了,老师在课堂上公布了每位同学的语文成绩,小明想查一下自己的成绩在班级能排到第几名。请你编写一个程序,根据给定的所有同学的语文成绩以及小明的语文成绩,计算出小明的排名。(假设所有人成绩都不相等)
输入描述
第一行一个整数 n 代表学生总人数(n<=100) 第二行,有 n 个整数,代表 n 个语文成绩(这些成绩都是 0~100 之间的分数) 第三行一个整数 x 代表小明同学的语文成绩
输出描述
一个整数,代表小明同学的名次
用例输入 1
5
98 100 99 80 87
98
用例输出 1
3
来源
数组问题
内容:思路:
- 首先读取学生总人数 n 和小明的语文成绩 x。
- 然后读取 n 个学生的语文成绩,并将它们存储在一个数组中。
- 对数组进行排序,从高到低排列。
- 遍历排序后的数组,找到小明的语文成绩在数组中的位置。
- 输出小明的名次,即数组中小明的位置加 1。
代码实现如下:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, x;
cin >> n;
int scores[n];
for (int i = 0; i < n; i++) {
cin >> scores[i];
}
cin >> x;
sort(scores, scores + n, greater<int>());
int rank = 0;
for (int i = 0; i < n; i++) {
if (scores[i] == x) {
rank = i + 1;
break;
}
}
cout << rank << endl;
return 0;
}
复杂度分析:
该算法的时间复杂度为 O(nlogn),其中 n 为学生总人数。首先需要读取 n 个学生的成绩,时间复杂度为 O(n)。然后对数组进行排序,时间复杂度为 O(nlogn)。最后遍历数组找到小明的名次,时间复杂度为 O(n)。因此,总的时间复杂度为 O(nlogn)。空间复杂度为 O(n),需要存储 n 个学生的成绩。
原文地址: https://www.cveoy.top/t/topic/qnHt 著作权归作者所有。请勿转载和采集!