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