1. 程式人生 > 其它 >華為od題 第86題

華為od題 第86題

'''
/ *
給定一個射擊比賽成績單
包含多個選手若干次射擊的成績分數
請對每個選手按其最高三個分數之和進行降序排名
輸出降序排名後的選手id序列
條件如下
1.
一個選手可以有多個射擊成績的分數,且次序不固定
2.
如果一個選手成績少於3個,則認為選手的所有成績無效,排名忽略該選手
3.
如果選手的成績之和相等,則相等的選手按照其id降序排列

輸入描述:
輸入第一行
一個整數N
表示該場比賽總共進行了N次射擊
產生N個成績分數
2 <= N <= 100

輸入第二行
一個長度為N整數序列
表示參與每次射擊的選手id
0 <= id <= 99

輸入第三行
一個長度為N整數序列
表示參與每次射擊選手對應的成績
0 <= 成績 <= 100

輸出描述:
符合題設條件的降序排名後的選手ID序列

示例一
輸入:
13
3, 3, 7, 4, 4, 4, 4, 7, 7, 3, 5, 5, 5
53, 80, 68, 24, 39, 76, 66, 16, 100, 55, 53, 80, 55
輸出:
5, 3, 7, 4
說明:
該場射擊比賽進行了13次
參賽的選手為
{3, 4, 5, 7}
3
號選手成績53, 80, 55
最高三個成績的和為188
4
號選手成績24, 39, 76, 66
最高三個成績的和為181
5
號選手成績53, 80, 55
最高三個成績的和為188
7
號選手成績68, 16, 100
最高三個成績的和為184
比較各個選手最高3個成績的和
有3號 = 5
號 > 7
號 > 4

由於3號和5號成績相等
且id
5 > 3
所以輸出5, 3, 7, 4
* /'''
dict1 = {}
a = '3, 3, 7, 4, 4, 4, 4, 7, 7, 3, 5, 5, 5'
b ='53, 80, 68, 24, 39, 76, 66, 16, 100, 55, 53, 80, 55'
a =a.split(', ')
b = b.split(', ')
for index,k in enumerate(a):
if k not in dict1.keys():
dict1[k] = b[index]
else:
dict1[k] = dict1.get(k)+' '+b[index]
for x,y in dict1.items():
y_list = y.split()
if len(y_list)<=2:
dict1.pop(x)
else:
y_list.sort()
score =int(y_list[-3])+int(y_list[-2])+int(y_list[-1])
dict1[x] = score
a = sorted(dict1.items(),key=lambda x:x[1],reverse=True)
print(a)
for i in range(len(a)-1) :
if a[i][1]==a[i+1][1]:
if a[i][0] <a[i+1][0]:
a[i],a[i+1] =a[i+1],a[i]
list1 = []
print(a)
for i in a:
list1.append(i[0])
print(', '.join(list1))