PAT (Basic Level) Practice (中文)1004 成绩排名 (20 分)

题目

读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

输入格式:
每个测试输入包含 1 个测试用例,格式为

第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
… … …
第 n+1 行:第 n 个学生的姓名 学号 成绩
其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

输出格式:
对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301
Joe Math990112

C++实现

#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int num,max=-1,min=101;
    string name,number,maxname,minname,maxnum,minnum;
    for (int i = 0; i < n; ++i) {
        cin>>name>>number>>num;
        if(num>max)
        {
            maxname=name;
            maxnum=number;
            max=num;
        }
        if(num<min)
        {
            minname=name;
            minnum=number;
            min=num;
        }
    }
    cout<<maxname<<' '<<maxnum<<endl<<minname<<' '<<minnum<<endl;
    return 0;
}

python实现

使用input()接收数据行数n,并通过for将详细信息存储在列表中。
考虑到每行数据都是以空格分割,因此使用.split(’ '),将字符串分割成字符串数组,存到列表中。

排序使用Python自带的sorted()函数。
该函数的语法是sorted(iterable[, cmp[, key[, reverse]]]),建议使用key或reverse参数,因为key和reverse比一个等价的cmp处理速度要快(对于每个列表元素,cmp都会被调用多次,而key和reverse只被调用一次)。
在这里key=lambda x:x[2]包含了一个lambda函数,key取每一行位置为2的数据(即第3列)进行升序排列(reverse = False为升序,默认)。

n=int(input())
sheet=[]
for i in range(0,n):
    sheet.append(input().split(' '))
    sheet[i][2]=int(sheet[i][2])
a=sorted(sheet,key=lambda x:x[2])
print(a[-1][0]+' '+a[-1][1])
print(a[0][0]+' '+a[0][1])
posted @ 2019-03-31 21:34  AlexKing007  阅读(93)  评论(0编辑  收藏  举报