1041 考试座位号
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
输入格式:
输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号
。其中准考证号
由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。
考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。
输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。
输入样例:
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4
输出样例:
3310120150912002 2
3310120150912119 1
解答:
N = eval(input())
information = {}
for i in range(N):
id,test,exam = map(int,input().split())
information[test] = [id,exam]
M = eval(input())
result = list(map(int,input().split()))
for i in range(M):
print(information[result[i]][0],information[result[i]][1])
1004 成绩排名
读入 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
解答:
n = eval(input())
information = {}
for i in range(n):
name,id,grade = input().split()
information[name] = [id,int(grade)]
maxstu = max(information,key = lambda x:information[x][1])
minstu = min(information,key = lambda x:information[x][1])
print(maxstu,information[maxstu][0])
print(minstu,information[minstu][0])
1028 人口普查
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。
输入格式:
输入在第一行给出正整数 N,取值在(0,105];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd
(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。
输出格式:
在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。
输入样例:
5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20
输出样例:
3 Tom John
解答:
https://www.gxlcms.com/python-357722.html
第一次解:
N = eval(input())
information = {}
m = 0
result_maxname = ""
result_minname = ""
result_maxtime = 0
result_mintime = 20140907
for i in range(N):
name,time_string = input().split()
time = int(time_string.replace('/',''))
if 18140906 <= time <= 20140906:
m += 1
if time > result_maxtime:
result_maxtime = time
result_maxname = name
if time < result_mintime:
result_mintime = time
result_minname = name
if m == 0:
print(0)
else:
print(m,result_minname,result_maxname)
添加了m=0的边界条件
第二次解:
因为超时,试了一下max函数
N = eval(input())
information = {}
m = 0
for i in range(N):
name,time_string = input().split()
time = int(time_string.replace('/',''))
if 18140906 <= time <= 20140906:
m += 1
information[name] = time
if information:
old = min(information,key = lambda x:information[x])
yong = max(information,key = lambda x:information[x])
if m == 0:
print(0)
else:
print(m,old,yong)
第三次解:
还是超时,询问同学,他的建议是不用转int
N = eval(input())
information = {}
m = 0
result_maxname = ""
result_minname = ""
result_maxtime = "0"
result_mintime = "20140907"
for i in range(N):
name,time_string = input().split()
time = time_string.replace('/','')
if "18140906" <= time <= "20140906":
m += 1
if time > result_maxtime:
result_maxtime = time
result_maxname = name
if time < result_mintime:
result_mintime = time
result_minname = name
if m == 0:
print(0)
else:
print(m,result_minname,result_maxname)
成功
第四次解:
还是同学的建议,在第一次解的基础上把输入改一下
import sys
N = eval(sys.stdin.readline())
information = {}
m = 0
result_maxname = ""
result_minname = ""
result_maxtime = 0
result_mintime = 20140907
for i in range(N):
name,time_string = sys.stdin.readline().split()
time = int(time_string.replace('/',''))
if 18140906 <= time <= 20140906:
m += 1
if time > result_maxtime:
result_maxtime = time
result_maxname = name
if time < result_mintime:
result_mintime = time
result_minname = name
if m == 0:
print(0)
else:
print(m,result_minname,result_maxname)
成功。
第五次解:
同学转发我的一个帖子,居然不用去掉反斜杠
import sys
N = eval(sys.stdin.readline())
information = {}
m = 0
result_maxname = ""
result_minname = ""
result_maxtime = "0"
result_mintime = "2014/09/07"
for i in range(N):
name,time = sys.stdin.readline().split()
if "1814/09/06" <= time <= "2014/09/06":
m += 1
if time > result_maxtime:
result_maxtime = time
result_maxname = name
if time < result_mintime:
result_mintime = time
result_minname = name
if m == 0:
print(0)
else:
print(m,result_minname,result_maxname)
也成功了
感想:
1.python很强大
2.有时候运行慢,可以从小细节着手,本题有,字符串直接比较和sys读入两种。