下面是python代码,它尝试使用找到的算术级数方程式here找到所有值之和除以特定数字
程序只会在少数时间内产生不正确的输出,每次都会以相同的数量关闭相同的数字。
示例输出 格式:首先是我们试图找到0-999之间所有数字之和的数字,它可以被它整除。接下来,是蛮力回答然后是我的尝试,最后是两个答案之间的差异
错误:7)correctAnswer = 71071!= testAnswer = 71000 correctAnswer-testAnswer = 71
错误:11)correctAnswer = 45045!= testAnswer = 45000 correctAnswer-testAnswer = 45
错误:13)correctAnswer = 38038!= testAnswer = 38000 correctAnswer-testAnswer = 38
错误:15)correctAnswer = 33165!= testAnswer = 33132 correctAnswer-testAnswer = 33
错误:17)correctAnswer = 29087!= testAnswer = 29058 correctAnswer-testAnswer = 29
错误:19)correctAnswer = 26182!= testAnswer = 26156 correctAnswer-testAnswer = 26
错误:29)correctAnswer = 17255!= testAnswer = 17238 correctAnswer-testAnswer = 17
错误:31)correctAnswer = 16368!= testAnswer = 16352 correctAnswer-testAnswer = 16
错误:33)correctAnswer = 15345!= testAnswer = 15330 correctAnswer-testAnswer = 15
错误:35)correctAnswer = 14210!= testAnswer = 14196 correctAnswer-testAnswer = 14
错误:41)correctAnswer = 12300!= testAnswer = 12288 correctAnswer-testAnswer = 12
错误:45)correctAnswer = 11385!= testAnswer = 11374 correctAnswer-testAnswer = 11
错误:49)correctAnswer = 10290!= testAnswer = 10280 correctAnswer-testAnswer = 10
错误:53)correctAnswer = 9063!= testAnswer = 9054 correctAnswer-testAnswer = 9
错误:55)correctAnswer = 9405!= testAnswer = 9396 correctAnswer-testAnswer = 9
...
列表继续,但请注意两个答案之间的差异是如何减少的。该错误最终在499处下降,换句话说,在499之后程序完美运行
代码在本段之后,它已完全记录,应准备好将粘贴复制到IDE中并运行。在这一点上,要么是这些问题 由一个带有derp(微不足道的错误)的一个herp引起的或者对该语言的一些误解。在此先感谢您的任何帮助
“”“SumDivisibleby返回a的总和 可分割的一系列数字 通过参数的值
参数: first - 一个指定第一个值的整数 其常数差异的算术系列 等于第一个值
last - 一个指定最后一个值的整数 其常数差异的算术系列 等于第一个值
nTerms - 一个整数,指定术语数 在常数差异的算术系列中 等于第一个值“”“
def SumDivisibleby(first,last,nTerms): return nTerms *((first + last)/ 2);
“”“nthTerm找到一个单词 在算术系列中 常数差异等于 第一个值
参数: first - 一个指定第一个值的整数 其常数差异的算术系列 等于第一个值
nTerms - 一个整数,指定术语数 在常数差异的算术系列中 等于第一个值
cDiff - 表示常数差异的整数 一个算术系列,如果它确实不同 从第一个值“”“
def nthTerm(first,nTerms,cDiff):
return first + ((nTerms - 1)*cDiff)
“”” determineN找到的数量 术语特定的算术系列 会有
first - 一个指定的整数 常数差的算术级数的第一个值 等于第一个值
max - 一个指定最高可能值的整数 算术系列中允许的值
cDiff - 表示常数差异的整数 一个算术系列,如果它确实不同 从第一个价值 “”“
def determineN (first, max, cDiff):
return ((max - first)/cDiff)+1
“”“testSumDivisibleBy是一个测试驱动程序 以上三个函数“”“
#This value is the chosen upper bound
#for the arithmetic series
chosenMax = 999
def testSumDivisibleBy ():
for i in range(1,2000000):
#Attempting to find the sum of all values divisible by i
numberOfTerms = determineN(i, chosenMax , i)
lastTerm = nthTerm(i, numberOfTerms, i)
testAnswer = SumDivisibleby(i,lastTerm,numberOfTerms)
#This is a brute force solution to the same problem
#that SumDivisibleBy() tries to solve
correctAnswer = 0
for j in range(0,chosenMax +1,i):
correctAnswer+=j
#This prompts the user when a discrepancy has come
#up and displays debug text
if(testAnswer != correctAnswer):
print "ERROR: " + repr(i) + ") correctAnswer = " + \
repr(correctAnswer) + " != testAnswer = " + \
repr(testAnswer) + " correctAnswer-testAnswer = " + \
repr(correctAnswer-testAnswer)
return
#Function call
testSumDivisibleBy()
答案 0 :(得分:3)
您遇到了整数除法和操作顺序的问题。删除括号以更改您的功能:
def SumDivisibleby(first,last,nTerms): return nTerms * ((first + last)/2);
到此:
def SumDivisibleby(first,last,nTerms): return nTerms * (first + last)/2;
编辑:作为这是一个问题的例子,考虑计算5 + 10 + 15 + 20的总和(4个项的序列增加5s)。这等于50,应该由SumDivisibleBy(5,20,4)给出。但是你的版本给出了48。