数字哑谜和回文
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