数字中的最大交替总和

时间:2014-03-22 09:22:09

标签: python

交替总和定义如下: alternating sum

我应该编写一个函数,找到具有特定长度的最大交替和: 例如,数字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)

2 个答案:

答案 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
相关问题