2017-03-28 61 views
0

注:我英語不好,請不要對我做出判斷就可以了:)項目歐拉項目67 - Python的

問題:

projecteuler.net/problem=18

歐拉計劃.net/problem = 67

我正在Python中執行Project Euler#67。我的計劃,該計劃的工作項目18,不用於項目67 代碼工作(不包括打開文件和信息的處理):

for i in range(len(temp)): 
    list1 = temp[i] 
    try: 
     list2 = temp[i+1] 
     trynum1 = list1[lastinput] + max(list2[lastinput],list2[lastinput+1]) 
     try: 
      trynum2 = list1[lastinput+1] + max(list2[lastinput+1],list2[lastinput+2]) 
      if trynum1 > trynum2: 
       outputlist.append(list1[lastinput]) 
      else: 
       outputlist.append(list1[lastinput+1]) 
       lastinput += 1 
     except IndexError: 
      outputlist.append(list1[0]) 
    except IndexError: 
     if list1[lastinput] > list1[lastinput+1]: 
      outputlist.append(list1[lastinput]) 
     else: 
      outputlist.append(list1[lastinput+1]) 

變量:

temp是三角形整數

outputlist是存儲由程序

我知道答案是7273所選的號碼清單,但我的程序發現6542.我找不到這會導致次錯誤情況。請可你幫我在這,因爲我已經抓我在這個項目上,幾乎所有我的頭髮掉了我的頭髮:O)

邏輯

我對這個節目的做法是找到一個號碼(列表1 [lastinput])並將它與它下面兩個較大的數字(trynum1)相加,並與第一個數字(list1 [lastinput + 1])右邊的數字進行比較,在其下面增加兩個較大的數字( trynum2)。我將更大的那個添加到輸出列表中。

+0

「注意:我的英文不好」 - 不,你不會! – SuperSaiyan

+0

嘗試從底部開始工作! – corn3lius

+0

你有沒有想過如何從底層開始構建它? –

回答

1

這種方法在邏輯上是有缺陷的。當你在第一行時,你沒有足夠的信息來判斷向右或向左移動是否會導致最大的總和,而不是隻有兩行的前瞻。您需要仔細查看底部以確保獲得最佳路徑。

正如其他人所建議的,從底部開始並着手。記住,你不需要整個路徑,只需要總和。在每個節點處,添加兩條可用路徑中較好的一條(這是您將該節點放在底部的分數)。當你回到頂端,溫度[0] [0],這個數字應該是你的最終答案。

+0

是的!我做的!謝謝你太多了! – rcw