Project Euler number 22的代码返回示例的正确awnser,但对于主要问题,它返回871323337,这是错误的。
使用names.txt(右键单击并将“保存链接/目标为...”),一个包含超过五千个名字的46K文本文件,首先按字母顺序排序。然后计算每个名称的字母值,将该值乘以列表中的字母位置以获得名称分数。 例如,当列表按字母顺序排序时,值为3 + 15 + 12 + 9 + 14 = 53的COLIN是列表中的第938个名称。因此,COLIN将获得938×53 = 49714的分数。 文件中所有名称分数的总和是多少?
y=[]
for a in range(1,len(x)+1):
s="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
for b in x:
if b<s:
s=b
y.append(s)
x.remove(s)
def letter_to_int(letter):
return int(ord(letter)-64)
def sum_in_string(s):
t=0
for i in s:
if i=='!':
break
t=t+letter_to_int(i)
return t+60
t=0
for i in range(0,len(y)):
t=t+sum_in_string(y[i])*(i+1)
print(t)
答案 0 :(得分:0)
以下代码可以使用:
names = ["MARY","PATRICIA","LINDA","BARBARA","ELIZABETH" . . . .]
alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
names = sorted(names)
total_score = 0
for i in range(0, len(names)):
name = names[i]
letter_score = 0
for letter in name:
letter_score += alphabet.index(letter) + 1
total_score += (i+1) * letter_score
print(total_score)
结果是871198282
如果有效,请务必将此答案投票正确!