最高的分数

GitHub跳转原题关系图返回列表

用打擂台变量记录当前最高分,初值取 0 以兼顾成绩非负和 n=0 的空序列。

OJ: roj

题目 ID: 1062

难度:入门

标签:入门输入输出python

创建: 2026-09-29 16:46

更新: 2026-10-04 23:49

题目描述

孙老师想知道《计算概论》期中考试的最高分。输入第一行是人数 nn(0⩽n<1000 \leqslant n < 100),第二行是 nn 个 00 到 100100 之间的整数成绩,相邻两数用单个空格隔开;输出一个整数,即最高的成绩,n=0n=0 时输出 0。 样例输入:5 / 85 78 90 99 60;样例输出:99。

思路

用一个变量打擂台记录当前最高分,初值取 00,从左到右读入每个成绩,比擂台值大就更新它,扫完输出擂台值。成绩非负,所以初值 00 不会被任何真实成绩超过,n=0n=0 的空序列也自然得到 00。时间复杂度 O(n)O(n),额外空间 O(1)O(1)。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 16:46
# update_at: 2026-10-04 10:11

import sys


def solve() -> None:
    data = iter(map(int, sys.stdin.buffer.read().split()))
    n = next(data)                            # 人数 n 可以为 0,此时没有成绩
    scores = (next(data) for _ in range(n))   # 顺序消费恰好 n 个成绩,惰性产出、不建中间列表
    print(max(scores, default=0))             # 成绩非负,空序列的最高分按 0 计


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-04 23:49
 * update_at: 2026-10-04 23:49
 */
// roj 1062 最高的分数
// 打擂台扫描:初值 0,读到一个成绩就更新当前最高分;n = 0 时无人考试,输出 0。

#include <cstdio>

typedef long long ll;

ll n;         // 参加考试的人数,可以为 0
ll cur_score; // 当前读到的成绩
ll best;      // 打擂台变量:到目前为止的最高分,初值 0(成绩非负,不会被真实成绩超过)

void solve() {
    scanf("%lld", &n);
    best = 0;
    for (ll i = 1; i <= n; i++) {
        scanf("%lld", &cur_score);
        if (cur_score > best) { // 只有遇到更高的成绩才更新擂台
            best = cur_score;
        }
    }
    printf("%lld\n", best);
}

int main() {
    solve();
    return 0;
}