C++ 编程题:计算学生排名(GESP 三级)

描述

期末考试语文成绩出来了,老师在课堂上公布了每位同学的语文成绩,小明想查一下自己的成绩在班级能排到第几名。请你编写一个程序,根据给定的所有同学的语文成绩以及小明的语文成绩,计算出小明的排名。(假设所有人成绩都不相等)

输入描述

第一行一个整数 n 代表学生总人数(n<=100) 第二行,有 n 个整数,代表 n 个语文成绩(这些成绩都是 0~100 之间的分数) 第三行一个整数 x 代表小明同学的语文成绩

输出描述

一个整数,代表小明同学的名次

用例输入 1

5
98 100 99 80 87
98

用例输出 1

3

来源

数组问题

内容:思路:

  1. 首先读取学生总人数 n 和小明的语文成绩 x。
  2. 然后读取 n 个学生的语文成绩,并将它们存储在一个数组中。
  3. 对数组进行排序,从高到低排列。
  4. 遍历排序后的数组,找到小明的语文成绩在数组中的位置。
  5. 输出小明的名次,即数组中小明的位置加 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 个学生的成绩。

C++ 编程题:计算学生排名(GESP 三级)

原文地址: https://www.cveoy.top/t/topic/qnHt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录