交替总和定义如下:
我应该编写一个函数,找到具有特定长度的最大交替和: 例如,数字43805具有长度为3的交替总和:
4-3+8,
3-8+0,
8-0+5
函数输出的示例:>>> altsum_digits(5**36, 12)
18
我写了我的代码,但由于某些原因我没有得到确切的结果,因为数字5 ** 36我得到答案20而不是18,你能告诉我我应该在代码中修复什么?
另一个问题:让我们定义nplus,nminus,nmult作为加法的数量,减法和乘法运算每次运行,我应该根据每个参数编写一个数学表达式输入n和d,我是初学者,我不知道如何做到这一点,我真的很感激任何帮助。
这是我的代码:
def altsum_digits(n,d):
c = [int(l) for l in str(n)]
maxaltsum=0
tmpmax=0
for i in range(0,d):
tmpmax=tmpmax+((-1)**(i)*c[i])
it=(len(c)-d)
for i in range(1,it):
tmpmax=c[i+d-1]-(tmpmax-c[i-1])
if (tmpmax)>maxaltsum:
maxaltsum=tmpmax
print(maxaltsum)
答案 0 :(得分:0)
基于简单的调试,我认为根据之前的tmpmax计算tmpmax是不正确的,你错过了一个减号:
使用tmpmax=-c[i+d-1]-(tmpmax-c[i-1])
代替tmpmax=c[i+d-1]-(tmpmax-c[i-1])
。
想一想,这是合乎逻辑的。在交替标志的森林中迷路总是很容易。
答案 1 :(得分:0)
在elias的回答中提到的三个错误和评论(maxaltsum
的错误初始化,第二个循环中错误的迭代次数,以及第二个循环中tmpmax计算中缺少-
),你可以通过使用Python的内置函数来避免至少遇到第一个。
每当你遇到“找出最大某事”的问题时,你的做法就是尽可能详尽地搜索所有可能的事情,你可以使用Python的内置函数{{ 1}}。以下是使用Python生成器执行此操作的方法:
max