1004. 成绩排名 (20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:每个测试输入包含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
n=input()
d={}
b=[]
for i in range(int(n)):
a = raw_input().split()
d[int(a[2])]=a[0]+' '+a[1]
for key in d:
b.append(key)
print(d[max(b)])
print(d[min(b)])
将所有的输入都变成字符串输入,然后使用split方法将每一个部分划分开,将分数作为key值。
然后将key值存到列表里面,在列表里检索key值,用max函数和min函数,然后将key值对应的的value值输出就行了。(参考了其他博主的代码,http://blog.csdn.net/zjw_python/article/details/62434011)
#include <iostream>
#include <algorithm>
using namespace std;
typedef struct acc
{
char name[12];
char num[12];
int score;
}ACC;
struct rule
{
bool operator () (const ACC &a1,const acc &a2)
{
return a1.score > a2.score;
}
};
int main ()
{
ACC ac[400];
int a;
cin >> a;
for (int i = 0; i < a;i++)
{
cin >> ac[i].name >> ac[i].num >> ac[i].score;
}
sort(ac,ac+a,rule());
cout << ac[0].name<<" "<<ac[0].num<<endl;
cout << ac[a-1].name<<" "<<ac[a-1].num;
}
使用sort方法进行排序,对于sort规则的定义在rule中,及对于整个结构体按照中的score的大小排序。
然后将结果的最大值和最小值,输出就好了。