2013-11-09 98 views
0

我需要編寫一個函數,將數字中的連續數字相加並返回它們中最大的數字。我寫了一個接收參數的函數(m,t)。 m表示數字(int),t(int也表示連接的數字的總和)。現在我想讓它通過數字中的所有數字,並在最後返回給我最大值。 我不明白爲什麼我的代碼不工作:一個數字中連續數字的最大總和

def sum_digits(m, t): 
    str_m= str(m) 

    for i in range(len(str_m)): 
     if t+i<len(str_m): 
      num= str_n[i:t+i] 
      num1='+'.join(num) 
      num2= str(eval(num1)) 
      lst= list(num2) 
     else: 
      break 


return max (lst) 

回答

0

你不工作的原因是lst越來越重置每次迭代。我想你打算在開始時進行設置並在每次迭代時添加它。另外:

啊啊!你不需要eval

def max_sum(m, t): 
    digits = map(int, str(m)) 
    max_sum = cur_sum = sum(digits[:t]) 
    for i, x in enumerate(s[t:], t): 
     cur_sum += x - digits[i - t] 
     max_sum = max(max_sum, cur_sum) 
    return max_sum 

此外,這具有爲O(log M)運行時間(或爲O(n),如果n是在m數位的數量),而不是幼稚O(T *日誌米)(或O( t * n))。

+0

這就是正確的,但正如我在beginnig設置空單時,我想將其追加給了我一個錯誤 – user2751595

0
>>> def maxSum(m, t): 
... m = str(m) 
... answer = 0 
... for digits in (m[i:i+t] for i in range(len(m)-t+1)): 
...  answer = max(answer, sum(int(d) for d in digits)) 
... return answer 
... 
>>> maxSum(1234567, 3) 
18 
+0

謝謝,但我想知道,如果你能解釋我什麼是與我的問題呢? – user2751595

+0

@ user2751595:我同意PaulDraper的看法,那就是你在每次迭代時重置'lst',這就是爲什麼你沒有得到正確的答案。另外,你正在使用一個變量'd'而沒有定義它 – inspectorG4dget

相關問題