[英]Maximum alternating sum in a number
交替和定义如下:
我应该编写一个函数,该函数查找具有特定长度的最大交替和:例如,数字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)
基于简单的调试,我认为您根据先前的tmpmax计算出的tmpmax不正确,您错过了减号:使用tmpmax=-c[i+d-1]-(tmpmax-c[i-1])
代替tmpmax=c[i+d-1]-(tmpmax-c[i-1])
。 仔细考虑一下,这是合乎逻辑的。 在交替出现的标志森林中迷路总是很容易的。
在Elias的答复中提到的3个缺陷和评论(的错误初始化的maxaltsum
,在第二循环中错误的迭代次数,以及缺少一个-
在第二循环中的tmpmax计算),你能避免以往任何时候都运行到至少第一个使用Python的内置函数。
只要你有一个问题,就是“制定出的最大的东西 ”,而你做它涉及详尽搜索所有可能出头的上限,您可以使用Python的内置函数的方式max
。 使用Python生成器的操作方法如下:
def altsums(n, d):
c = [int(l) for l in str(n)]
alt = 0
for i in range(0,d):
alt=alt+((-1)**(i)*c[i])
yield alt
it=(len(c)-d)
for i in range(1,it):
alt = -c[i+d-1]-(alt-c[i-1])
yield alt
print(max(altsums(5**36, 12))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.