数字哑谜和回文

1.有这样的乘法算式:

  人过大佛寺 * 我 = 寺佛大过人

 每一个字都代表一个数字,不同的字表示不同的数字,找出这些数字。

  解法:使用暴力搜索的方法,(因为这两天再看Python,所以刚好用Python写了下这个简单的程序):

  找到的是 21978, 4

 1 def checkN(n):
 2     nums = []
 3     while n > 0:
 4         cur = n % 10
 5         if cur in nums:
 6             return True
 7         else:
 8             nums.append(cur)
 9         n /= 10
10     return False
11 
12 def checkC(n, c):
13     while n > 0:
14         if c == n % 10:
15             return True
16         n /= 10
17     return False
18 
19 def is_right(p, q):
20     p_str = str(p)
21  
22     q_list = list(str(q))
23     q_list.reverse()
24     q_str = ''.join(q_list)
25     if(p_str == q_str):
26         return True
27     else:
28         return False
29 
30 for number in range(10000, 99999):
31  #   print cur          #用于测试的行
32     if(checkN(number)):
33         continue
34     for c in range(2, 10):
35         if checkC(number, c) :
36             continue
37         temp = number * c
38         if is_right(number, temp):
39             print number, c
40         temp = list(str(temp)).reverse()
41         if temp == str(number):
42             print number, c

2.已知回文数就是类似于11,22,33,……99,三位数中,101,111,121,……222,……999。那么N位数总共有多少个回文数。

  考虑前 upper(N/2)位,(upper表示对N/2向上取整)前N/2位数字决定了整个数字取值。第一个数字取1~9,有9种,后面每个都可以取0~9,有10种,所以

  共有   9 * 10 upper(N/2) 种取法。

3. 判断 (he)2 = she。各个数字

  252 = 625

posted @ 2012-09-17 21:07  dandingyy  阅读(855)  评论(0编辑  收藏  举报