2016-11-10 71 views
0

的一個最大的迴文我試圖解決this問題上SPOJ下一個最大的迴文,但它是扔我的時間限制超出錯誤。這是我在Python這個問題的方法,尋找一些

t = int(raw_input().strip()) 

for i in range(t): 
    a = raw_input() 
    a = str(int(a) + 1) 
    palin = "" 

    if (len(a) % 2 == 0): 

     reverseoffirst = [] 
     mainStr = a 

     firsthalf = mainStr[0:len(a)/2] 
     secondhalf = firsthalf[::-1] 

     palin = "".join(firsthalf) + "".join(secondhalf) 

     if (int(palin) < int(a)): 
      firsthalf = str(int(firsthalf) + 1) 
      secondhalf = firsthalf[::-1] 
      palin = "".join(firsthalf) + "".join(secondhalf) 


    else: 
     median = len(a)/2 
     mainStr = a 

     if(median == 0): 
      palin = "11" 

     else: 
      firsthalf = mainStr[0:median] 
      secondhalf = firsthalf[::-1] 

      palin = "".join(firsthalf) + mainStr[median] + "".join(secondhalf) 

      if (int(palin) < int(a)): 
       lastvalue = int(mainStr[median]) + 1 

       if (lastvalue == 10): 
        firsthalf = str(int(firsthalf) + 1) 
        secondhalf = firsthalf[::-1] 
        palin = firsthalf + "0" + secondhalf 

       else: 
        palin = firsthalf + str(lastvalue) + secondhalf 
    print palin 

我知道我的問題可能會得到downvoted爲是像這樣的幾個問題重複,但我的方法是不是從任何地方複製。這就是爲什麼我想知道我的代碼有什麼問題。

請,如果你能指出任何一種方式,這種代碼可以得到任何好轉或任何測試用例,它不符合或任何其他的辦法,將是對我非常有幫助。謝謝!!

+0

你用什麼輸入? – 2016-11-10 07:41:13

+0

我使用了很多測試用例........但所有測試用例都滿足我的代碼。例如:65973,最近的迴文將是66066. – Proloy

+0

那麼你的問題是什麼? – 2016-11-10 08:18:13

回答

0

我把你的代碼,並改變了它一下,讓你的邏輯是一樣的。

嘗試調試它,你會更好地理解它的工作方式。

注重它只會工作的數量,而不是字母。

基本上,按照你的邏輯,我檢查了參加上半年與下半年的就是下一個迴文

好運

a = str(int(input())) # the initial number to check 
is_palin = False 
while True: 
    a = str(int(a) + 1) 
    if is_palin: 
     print palin 
     break 
    palin = "" 

    if (len(a) % 2 == 0): 

     reverseoffirst = [] 
     mainStr = a 

     firsthalf = mainStr[0:len(a)/2] 
     secondhalf = firsthalf[::-1] 

     palin = "".join(firsthalf) + "".join(secondhalf) 

     if (int(palin) == int(a)): 
      is_palin = True 
      print palin 


    else: 
     median = (len(a)/2) 
     mainStr = a 
     firsthalf = mainStr[0:median] 
     secondhalf = firsthalf[::-1] 
     palin = "".join(firsthalf) + mainStr[median] + "".join(secondhalf) 
     if (int(palin) == int(a)): 
      is_palin = True 
      print palin 

Output

+0

請檢查2133它應該打印2222 2222是最近的迴文。 – Proloy

+0

那麼,結果是2222 .. @Proloy –

+0

好的,但是這個代碼不打印.. – Proloy

0

也許不是最有效的方法:

def IsPalindrome(n): 
     s = str(n) 
     l = len(s) 
     return s[:l/2] == s[:(l+1)/2-1:-1] 

def NextPalindrome(n): 
     while not IsPalindrome(n): 
       n += 1 
     return n 

但是NextPalindrome(65973)立即返回66066