【发布时间】:2014-09-11 18:57:50
【问题描述】:
我一直在 Code Abbey 处理问题 17。任务是找到一个数组的校验和。
我希望能解释一下为什么答案是正确的以及为什么我的解决方案不起作用。
您将获得应计算校验和的数组。执行如下计算:对于数组的每个元素(从头开始)将此元素添加到
result变量并将此和乘以113- 这个新值取模10000007应该成为 @987654325 的下一个值@,等等。例子:
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))
【问题讨论】:
-
这会漏掉最后一个元素,试试 range(len(a))
-
或者更好的是,完全跳过索引并执行
for item in a: -
6235989 是我的代码使用提供的测试用例生成的(每次刷新页面时都会随机提供新的测试用例),但正确的答案(再次,以当前测试数组作为输入)是 4669996。另外,我从数组长度中减去 1 的原因是为了索引目的,即 a[0]。
-
你们觉得我的算法怎么样?显然,我做错了什么,因为我每次都得到错误的答案。但是,我完全按照作者给出的指示进行操作......要么作者没有很好地解释算法,要么我错过了一些东西,或者只是做错了什么。如果这个练习的作者是一个比我更好的程序员,我会选择后者:/
-
你将不得不给我们一个测试用例,因为我只是用链接页面上的那个。
标签: python arrays algorithm checksum