n = int(input())
a_name = []
a_score = []
for _ in range(n):
name = input()
score = float(input())
a_name.append(name)
a_score.append(score)
a_score1 = set(a_score)
a_score1.remove(min(a_score1))
x = min(a_score1)
for i in range(n):
if a_score[i]==x:
print(a_name[i])
对于以下代码输入是:5哈里37.21浆果37.21蒂娜37.2阿克里蒂41苛刻39
我的输出:哈里浆果
预期输出:浆果哈里
我是编程界的新手,希望能帮助您解决此问题。这是一个黑客等级问题,问题是要找到第二个最低分的名字。我能够通过8/10个测试用例,但是有2个测试用例都无法通过该解决方案。我能够找到正确的名称(即得分第二低的名称),但打印顺序错误)
您可以首先找到第二个最小值,然后使用列表推导和内置函数zip查找具有第二个最小值的名称。>
second_minim = sorted(a_score)[1] [n for n, s in zip(a_name, a_score) if s == second_minim]
输出:
['Harry', 'Berry']
与根据您指出的
['Berry', 'Harry']
为何应为['Harry', 'Berry']
而不是requirements:
[如果有多个同年级的学生,请按字母顺序排列其姓名,并在新行上打印每个姓名
因此您应该使用:
result = sorted(n for n, s in zip(a_name, a_score) if s == second_minim) print(*result, sep='\n')
输出:
Berry
Harry
因此,您可以使用分数将分数映射到名称,而不是使用两个列表。像这样:
n = int(input())
a_name = []
a_score = []
for _ in range(n):
name = input()
score = float(input())
a_name.append(name)
a_score.append(score)
a_score1 = set(a_score)
a_score1.remove(min(a_score1))
x = min(a_score1)
y =[]
for i in range(n):
if a_score[i]==x:
y.append(a_name[i])
y.sort()
for j in range(len(y)):
print(y[j])