繁体   English   中英

数字中的最大交替总和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM