top1编程
← 返回题目
题解

查询分数2

1 条题解

  • 0
    @ 2026-8-5 0:56:09

    解题思路

    这道题其实就是**“先存起来,再按号查找”**。

    学生学号从1开始,所以第1个输入的分数就是1号同学,第2个输入的分数就是2号同学……我们把分数按顺序存进数组,数组的下标正好就对应学号。

    为什么一定要用数组存?因为如果一边读一边就丢掉前面的分数,等最后读到要查询的学号时,前面的分数早就没啦!数组就像一排抽屉,每个抽屉上贴着一个学号标签,我们可以把每个学生的分数放进对应的抽屉里,想找谁就找谁。

    步骤:

    1. 读入学生人数 n;
    2. 用一个循环,把 n 个分数依次存进数组 a[1]~a[n];
    3. 读入要查询的学号 id;
    4. 直接输出 a[id],这就是该同学的分数。

    参考代码

    // P4450 查询分数2:把n个分数存入数组(学号1~n),再按学号id输出对应分数
    #include <iostream>
    using namespace std;
    
    int a[105]; // a[i]存学号为i的同学的分数
    
    int main() {
        int n, id;
        cin >> n;                     // 学生人数
        for (int i = 1; i <= n; i++)  // 学号从1开始
            cin >> a[i];              // 读入每个学生的分数
        cin >> id;                    // 要查询的学号
        cout << a[id] << endl;        // 学号id的分数就是数组第id个元素
        return 0;
    }
    

    复杂度分析

    • 需要读入 n 个分数,再输出 1 个分数,所以时间复杂度是 O(n)。
    • 开了一个长度为 n 的数组存分数,空间复杂度是 O(n)。题目说 n≤100,所以开 105 个格子足够了。
    • 1