簡體   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