2014-11-15 48 views
0

我的代碼給出了錯誤的答案(根據裁判),我無法弄清楚爲什麼(第二個代碼)。幾天前我剛剛開始在CodeChef上解決一些簡單的問題。CodeChef「Double Strings」錯誤的答案

雙字符串是前半部分等於後半部分(字符串長度均勻)的字符串。問題陳述是找出通過刪除和更改長度爲N的迴文符號的順序可以獲得的最大可能字符數。

樣本輸入的第一行包含整數T - 數字的測試用例。然後,T行跟隨。每行包含一個整數N--迴文長度。

顯然,如果迴文的長度是偶數,那麼雙字符串的長度就是N.如果迴文的長度是奇數,那麼輸出應該是N-1。

這也是從我接受的解決辦法的一個明顯下面給出:

def main(): 
    t = int(raw_input()) 
    for i in xrange(t): 
     n = int(raw_input()) 
     if n%2: 
      print (n-1) 
     else: 
      print n 
if __name__ == "__main__": 
    main() 

我什麼無法弄清楚的是,爲什麼我的其他解決方案(下)與理由拒絕爲錯誤答案,即使它做同樣的事情(根據我)。是否有任何情況下它會給出與上面代碼不同的輸出結果?

Link to the problem statement

def main(): 
    t = int(raw_input()) 
    for i in xrange(t): 
     n = raw_input() 
     if n[-1] in '02468': 
      print int(n) 
     else: 
      print (int(n)-1) 
if __name__ == "__main__": 
    main() 

回答

0

你的奇/偶校驗是錯誤的,因爲raw_input()可以返回由空格包圍數。

>>> n = raw_input() 
12 
>>> n 
'12 ' 
>>> n[-1] in '02468' 
False 
>>> int(n) % 2 == 0 
True 

正如您所看到的,接受的解決方案可以使用空格處理輸入,而解決方案不能。

要修復它,用n = raw_input().strip()

注意,在實際Python編程,你應該總是使用int(n) % 2檢查,因爲它是簡單,高效,不會接受錯誤的輸入,如'abc22'

+0

謝謝,添加'strip'讓它接受我的解決方案。問題規格說'每一行由一個整數N組成 - 一個迴文長度。'這導致我錯誤地認爲它只有沒有任何額外字符的整數。 –