我一直致力于Code Abbey的问题17。任务是找到数组的校验和。
我希望得到一个解释,为什么答案是正确的,为什么我的解决方案不起作用。
您将获得应计算校验和的数组。按如下方式执行计算:对于数组的每个元素(从头开始),将此元素添加到
result
变量并将此总和乘以113
- 模10000007
取的这个新值应该变为result
的下一个值,依此类推。示例:
input data: 6 3 1 4 1 5 9 answer: 8921379
所有输入值都在
0
和1,000,000,000
之间 - 请务必注意计算过程中可能出现的溢出。
这是我的尝试:
a = [int(x) for x in input().split()]
def get_checksum(a):
seed = 113
limit = 10000007
result = 0
for i in range(len(a) - 1):
result += a[i]
result *= seed
result %= limit
return result
print(get_checksum(a))
答案 0 :(得分:1)
如果您将另一个对象添加到数组的末尾,您将得到正确的答案:
a = [3, 1, 4, 1, 5, 9, "X"]
def get_checksum(a):
seed = 113
limit = 10000007
result = 0
for i in range(len(a) - 1):
result += a[i]
result *= seed
result %= limit
return result
print(get_checksum(a))
#>>> 8921379
所以Peter de Rivaz说这是因为你错过了最后一个元素。拿凯文的答案,然后循环遍历a
中的项目:
a = [3, 1, 4, 1, 5, 9]
def get_checksum(a):
seed = 113
limit = 10000007
result = 0
for item in a:
result += item
result *= seed
result %= limit
return result
print(get_checksum(a))
#>>> 8921379
答案 1 :(得分:0)
def get_checksum(a):
seed = 113
limit = 10000007
result = 0
for i in range(len(a)):
result += a[i]
result *= seed
result %= limit
return result
print(get_checksum([3, 1, 4, 1, 5 , 9]))
打印出8921379
。