PTA:Python解答1047 编程团体赛/1048 数字加密

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)
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注