1047 编程团体赛 (20分)
编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。
现给定所有队员的比赛成绩,请你编写程序找出冠军队。
输入格式:
输入第一行给出一个正整数 N(≤10^4),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩
,其中队伍编号
为 1 到 1000 的正整数,队员编号
为 1 到 10 的正整数,成绩
为 0 到 100 的整数。
输出格式:
在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。
输入样例:
6
3-10 99
11-5 87
102-1 0
102-3 100
11-9 89
3-2 61
输出样例:
11 176
解题思路:
用字典把相同队伍的队员的成绩加起来就能解决问题了。
完整代码:
n = eval(input()) dl = {} for i in range(n): m = input().split() a = m[0].split('-') b = a[0] if b in dl: dl[b] += int(m[1]) else: dl[b] = int(m[1]) ls = list(dl.items()) ls.sort(key = lambda x:x[1],reverse = True) print(ls[0][0],ls[0][1])
1048 数字加密 (20分)
本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
输入格式:
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:
1234567 368782971
输出样例:
3695Q8118
解题思路:
这道题按照规则逐一加密就行。需要注意的是,虽然题目没说,但若要加密的数字的位数小于加密用的数,则需要在前面加0补齐,若用于加密的数的位数较少,则未加密的位按原数输出。
完整代码:
a = input().split() str1 = "" str2 = "" if len(a[0])>=len(a[1]): x = a[0] y = (len(a[0])-len(a[1]))*'0'+a[1] else: x = a[0] y = a[1][len(a[1])-len(a[0]):] str1 = a[1][:len(a[1])-len(a[0])] x = x[::-1] y = y[::-1] for i in range(len(x)): if (i+1)%2!=0: n = (int(x[i])+int(y[i]))%13 if n==10: str2 = 'J' + str2 elif n==11: str2 = 'Q' + str2 elif n==12: str2 = 'K' + str2 else: str2 = str(n) + str2 else: n = int(y[i])-int(x[i]) if n<0: n+=10 str2 = str(n) + str2 print(str1+str2)