我是编程新手,但我设法写了一个程序来解决Google Kickstart 2016轮A中的“国家领导人”问题
https://codingcompetitions.withgoogle.com/kickstart/round/0000000000201ca2/0000000000201d30
我的程序在IDE中运行良好,但当我将它粘贴到Kickstart中时,它遇到了RE(运行时错误)。我在谷歌上搜索过,但我几乎找不到一个有效的解决这个问题的方法。如果有人能给我解释一下为什么会发生这个错误,我将不胜感激。下面是我的代码:
t = int(input())
tc = 0
while t > 0:
name_number = int(input())
name_dict = {}
for _ in range(name_number):
name = input()
name_dict[name] = list(dict.fromkeys(list(name.replace(" ",""))))
name = ""
leader_list = []
for a in list(name_dict):
if all(len(name_dict[a]) >= len(name_dict[i]) for i in (list(name_dict))):
leader_list.append(a)
if len(leader_list) > 1:
for x in leader_list:
if all( x <= y for y in leader_list):
leader = x
break
else:
leader = leader_list[0]
tc += 1
print(f"Case #{tc}: {leader}")
t -= 1发布于 2020-07-15 13:11:36
您不需要保留任何列表来存储排序后的名称。您可以使用一个字典,它将人名存储为键,将不同字符的长度存储为值。先按值按降序排序,然后按键按升序排序。第一个排序的键是所需的名称leader。
我已经像下面这样实现了这个逻辑,它通过了挑战的所有测试用例:
cas = int(input())
for t in range(1, cas+1):
n = int(input())
d = {}
for i in range(n):
person = input()
d[person] = len(set(person.replace(" ","")))
for key, value in sorted(d.items(), key=lambda x: (-x[1], x[0])):
print("Case #{}: {}".format(t, key))
break解释:
key=lambda x: (-x[1], x[0]))这将按值按降序排列字典,按键按升序排列。这个排序操作之后的第一个值是我们想要的输出,因此我中断了循环。在Python3.6之前,dictinoary不能排序,我不知道codingcompetitions.withgoogle.com使用的是哪个Python版本。因此,我使用了一个循环来打印排序后的字典值,并在第一次打印后中断循环。
为了方便您的参考,我从language下拉菜单中选择了Python 3,并将上述代码粘贴到编辑器中。它通过了所有测试用例。
发布于 2020-11-22 20:56:10
在你发布这篇文章的时候,Kick Start使用的是python3.5,它不支持f字符串。但是,现在他们的python3版本是3.7版,所以您的代码现在应该可以工作了。
https://stackoverflow.com/questions/62907770
复制相似问题