2015-08-16 61 views
-4

我必須找到數組中的元素之和最大(或它們的置換形式),元件的值的陣列查找給定陣列的元件的最大總和

查找算法中取決於它們的位置在特定的陣列的合計如下

int taste = 0 
for (int i= 0; i <= N; i++){ 
    if (p[i]) - p[i-1]) >= 0): 
     taste += i * (p[i]) - p[i - 1]) 
    else: 
     taste += i * (p[i - 1] - p[i]) 

我的解決辦法是蟒蛇,但我總是得到的結果爲0

from itertools import permutations 
def sum_permuatations(): 
    t = int(input()) 
    taste = 0 
    maxTaste = 0 
    while (t!=0): 
     t = t-1 
     lent = input() 
     lis = input() 

     for p in permutations(lis, len(lent)): 
      for i in range(2,len(p)+1): 
       if (int(p[i]) - int(p[i-1]) >= 0): 
        taste += i*(int(p[i])-int(p[i-1])) 
       else: 
        taste += i*(int(p[i-1])- int(p[i])) 
      if taste > maxTaste: 
       maxTaste = taste 
     return maxTaste 

請幫我解決我的共同的錯誤德。

+2

'= +'不符合你的想法。它應該是'+ ='。 –

+0

爲什麼你使用while循環,並在一個循環後才返回? –

+0

我認爲問題是縮進。最後的返回必須被縮進一步所以,它不能是while循環的一部分。 –

回答

1

該解決方案還使用itertools庫來生成各種排列。對於每個那些最大相鄰和公式可以通過使用zip來計算列表中的連續數字對。函數enumerate也用於給出每對的位置。

import itertools 

input_list = [10, 15, 16] 
result = [] 

for perm in itertools.permutations(input_list): 
    sum_diff = 0 
    for i,pair in enumerate(itertools.izip(perm[:-1], perm[1:])): 
     sum_diff += abs(pair[0]-pair[1]) * (i+2) 
    result.append((sum_diff, perm)) 

result.sort() 
print result[-1] 

這將給予以下結果:

(28, (15, 10, 16)) 

或者,如果您打印整個列表:

[(13, (10, 15, 16)), (15, (10, 16, 15)), (17, (16, 15, 10)), (20, (15, 16, 10)), (27, (16, 10, 15)), (28, (15, 10, 16))] 

您的解決方案有幾個小問題,使用range將啓動0.對於每個置換,taste也需要歸零,如下所示:

from itertools import permutations 

def sum_permuatations(lis): 
    maxTaste = 0 

    for p in permutations(lis): 
     taste = 0 
     for i in range(1,len(p)): 
      if (int(p[i]) - int(p[i-1]) >= 0): 
       taste += (i+1)*(int(p[i]) - int(p[i-1])) 
      else: 
       taste += (i+1)*(int(p[i-1]) - int(p[i])) 

     if taste > maxTaste: 
      maxTaste = taste 

    return maxTaste 

input_list = [10, 15, 16] 
print sum_permuatations(input_list) 

您將需要編輯它以提示輸入,這只是使測試更容易。您可以編輯它以使用abs命令來避免需要按不同順序進行減法。

+1

'permutations(input_list,len(input_list))'==>只是'permutations(input_list)' – itzMEonTV

相關問題