2016-02-12 64 views
0

所以我試圖解決從弗吉尼亞在線法官以下問題:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2864弗吉尼亞運行時錯誤

我用Python編寫下面的代碼:

t = int(input()) 
for i in range(t): 
    highs = 0 
    lows = 0 
    walls = int(input()) 
    heights = [0]*50 
    for h in range(walls): 
     heights[h] = (int(input())) 
    for j in range(1, walls): 
     if (heights[j] < heights[j - 1]): 
      highs += 1 
     elif (heights[j] > heights[j - 1]): 
      lows += 1 
    print("Case %d: %d %d" % (i + 1, highs, lows)) 

exit(0) 

每次我嘗試我的代碼與不同的測試用例我得到預期的輸出;它在我身邊工作得很好,但是當我提交它時,我一直在收到運行時錯誤。我現在絕望了,因爲我已經嘗試了一百萬件事情,而且沒有任何作用。請幫忙。

+0

我得到一個運行時錯誤是不是很有用...在猜測法官使用2.7,你寫了3.x –

+1

歡迎來到StackOverflow。如果你提供'RunTimeError'的消息,它將有助於看到發生了什麼 - 只需編輯問題並粘貼它;-) – SebasSBM

+0

謝謝@SebasSBM,但在線法官並未指定哪個RunTimeError它是 –

回答

1

我認爲錯誤是在這裏:

for h in range(walls): 
    heights[h] = (int(input())) 

input()讀取一行,然後int()嘗試將線轉換爲整數。但"1 4 2 2 3 5 3 4"不能轉換爲整數,並且如果讀取了8行,則可能會用完輸入。

相反,嘗試

heights = [int(i) for i in input().split()] 

應返回[1, 4, 2, 2, 3, 5, 3, 4]

+0

非常感謝你許多!那樣做了,法官接受了這個守則。 –

0

至於建議的運行時錯誤是在你的這部分代碼:

for h in range(walls): 
    heights[h] = (int(input())) 

,你可以更改

heights = [int(i) for i in input().split()] 

,並省略線

heights = [0]*50 

另一件事,我發現你正在以相反的方式計算低點和高點。你應該這樣做:

if (heights[j] < heights[j - 1]): 
     lows += 1 
    elif (heights[j] > heights[j - 1]): 
     highs += 1 

這應該工作。希望你得到的解決方案接受;)

+0

謝謝,我明白了! –

+0

歡迎你! – melalonso

相關問題