输出最高分数的学生姓名

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

逐个读取分数和姓名,仅在分数更高时更新最高分学生。

OJ: noi_openjudge

题目 ID: ch0109-02

难度:入门

标签:模拟最值python

日期: 2026-07-30 23:01

题意

输出唯一最高分学生的姓名。

思路

维护当前最高分和对应姓名。逐条读入时只有发现更高分数才更新,最终姓名即答案。

代码

cpp
#include <cstdio>
#include <cstring>

using namespace std;

int n;
int fen;
char name[1000];
int max=-1;
char t[1000];
int main(){
    scanf("%d",&n);
    int i,j;
    for (i=1;i<=n;i++){
        scanf("%d",&fen);
        scanf("%s",t);
        if( fen > max){
            max = fen;
            strcpy(name,t);
        }
    }
    printf("%s\n",name);
    return 0;
}

复杂度

时间复杂度为 O(n)O(n),额外空间复杂度为 O(1)O(1)

总结

只需最优记录时可边读取边更新,无需保存全部学生。

Python代码

python
student_count = int(input())
best_score = -1
best_name = ""

for _ in range(student_count):
    score_text, name = input().split()
    score = int(score_text)
    if score > best_score:
        best_score = score
        best_name = name

print(best_name)

C++代码

cpp
#include <cstdio>
#include <cstring>

using namespace std;

int n;
int fen;
char name[1000];
int max=-1;
char t[1000];
int main(){
    scanf("%d",&n);
    int i,j;
    for (i=1;i<=n;i++){
        scanf("%d",&fen);
        scanf("%s",t);
        if( fen > max){
            max = fen;
            strcpy(name,t);
        }
    }
    printf("%s\n",name);
    return 0;
}