2014-06-07 4 views
0

내가 시도한 것은 두 개의 3 자리 숫자의 곱으로 만들어진 가장 큰 palindrome을 찾는 것입니다. (어떤 종류의 코드가 어떤 코드인지) 이제는 가장 큰 숫자가 906609 또는 913 * 993이라는 것을 알았습니다. 이제 다음 코드는 그 번호를 찾지 못할 것입니다. 코드가 바로 지금이기 때문에 그것은 내가 914과 994의에 수를 변경하면 내가 알고 싶은 가장 큰가장 큰 palindrome 제품 python

for x in xrange(0, 1000): 
    for y in xrange(0, 1000): 
     #print '%d * %d = %d' % (x, y, x*y) 
     num = (x * y) 
     q = list(str(x * y)) 
     q.reverse() 
     w = q 
     #print(w) 
     s = filter(str.isdigit, repr(q)) 
     q = int(s) 
     #print(q) 
     if num == q: 
      hold3 = num, q, x , y 
      print(hold3) 

print(hold3) 

등 90,909 지금 그것은 나에게 906609. 의 대답을 줄 것이다 발견 왜 이것으로 두 개의 다른 번호를 얻고 있습니다. 죄송합니다. 저는 Python을 처음 접했습니다.

for x in xrange(0, 914): 
    for y in xrange(0, 994): 
     #print '%d * %d = %d' % (x, y, x*y) 
     num = (x * y) 
     q = list(str(x * y)) 
     q.reverse() 
     w = q 
     #print(w) 
     s = filter(str.isdigit, repr(q)) 
     q = int(s) 
     #print(q) 
     if num == q: 
      hold3 = num, q, x , y 
      print(hold3) 

print(hold3) 
+1

''X range' –

+0

X 범위는 오타, 그것은 그렇지 않으면 –

+0

@MartinKonecny ​​감사를 실행하지 않을 수 없습니다 xrange' 나는 그것을 하나로 유지하는 것을 잊었다. – hurnhu

답변

1

두 코드 모두 906609를 찾습니다. 그러나 첫 번째 코드는 나중에 결과를 덮어 씁니다.

당신이 찾은 현재 palindrome이 이전에 찾은 것보다 크고 무시하지 않았는지 확인해야합니다. 코드에

약간의 비틀기 :이 입력 될 때

largest = 0 
for x in xrange(0, 1000): 
    for y in xrange(0, 1000): 
     #print '%d * %d = %d' % (x, y, x*y) 
     num = (x * y) 
     q = list(str(x * y)) 
     q.reverse() 
     w = q 
     #print(w) 
     s = filter(str.isdigit, repr(q)) 
     q = int(s) 
     #print(q) 
     if num == q and num > largest: 
      largest = num 
      hold3 = num, q, x , y 
      print(hold3) 

print(hold3) # correctly shows 906609 is the largest number 
사용한다
+0

감사합니다! 완벽하게 작동하고, 내가 가장 큰 것을 덮어 썼다는 것을 깨닫지 못했다. 다시 한 번 감사드립니다! – hurnhu

1

906609 최대 팔린 드롬 제품이기 때문에 발생하지만, 하지 팔린 드롬 번호 (y == 91999) x의 최대 값에 대응. 업데이트하기 전에

확인 :

 if num == q and num > hold3[0]: 

당신은 예를 들어, 초기화해야합니다 hold3 = [0].