【GESP三级】学员的名次?暂无标签时间限制:CC++ 1000MS其他语言 2000MS内存限制:CC++ 16MB其他语言 32MB难度:中等出题人:描述期末考试语文成绩出来了老师在课堂上公布了每位同学的语文成绩小明想查一下自己的成绩在班级能排到第几名。请你编写一个程序根据给定的所有同学的语文成绩以及小明的语文成绩计算出小明的排名。假设所有人成绩都不相等输入描述第一行一个整数n代表学生总人数n
思路:
- 首先读取学生总人数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个学生的成绩
原文地址: http://www.cveoy.top/t/topic/iHbQ 著作权归作者所有。请勿转载和采集!