/*
数字哑谜和回文:
1神奇的9位数。能不能找出符合如下条件的9位数:
这个数包括了1~9这9个数字;
这个9位数的前n位都能被n整除,若这个数表示为abcdefghi,则ab可以被2整除,abc可以被3整除......abcdefghi可以被9整除
2有这样一个乘法算式:
人过大佛寺*我=寺佛大过人
这里面每一个字都代表着一个数字,并且不同的字代表的数字不同,你能把这些数字都找出来吗?
分析:
问题1的解法1:
假设这个9位数是abcdefghi,,诶个字符对应1~9之间的数。可以考虑剪枝来优化性能。
剪枝=避开死胡同,把搜索比作遍历一棵树,那么剪枝就是讲数中的一些不能到达的枝条剪掉。
比如循环到b等于奇数时,ab必须被2整除,b必须为偶数。
问题1的解法2:
试一试用逻辑推理的办法来求解这个问题,假设每个字符目前都可以对应1~9之间的任何数字。
a 1 2 3 4 5 6 7 8 9
b 1 2 3 4 5 6 7 8 9
c 1 2 3 4 5 6 7 8 9
d 1 2 3 4 5 6 7 8 9
e 1 2 3 4 5 6 7 8 9
f 1 2 3 4 5 6 7 8 9
g 1 2 3 4 5 6 7 8 9
h 1 2 3 4 5 6 7 8 9
i 1 2 3 4 5 6 7 8 9
把整除的条件列出来,
a被1整除,任何数都满足这个条件,
b为0,2,4,6,8
abc必须被3整除,那么a+b+c=3*k
abcd必须被4整除,那么d必须为2,4,6,8,cd被4整除
abcde被5整除,e为5(0为什么不可能,因为是1~9,没有0)
abcdef被6整除,f = 2,4,6,8,a+b+c+d+e+f=3*k,不易想到
abcdefg被7整除,abcd -efg能被7整除(考虑到7能整除1001),不易想到
abcdefgh被8整除,h = 2,4,6,8,fgh能被8整除,不易想到
abcdefghi被9整除,a+b+c+d+e+f+g+h+i=9*k,不易想到
范围如下:
a 1 3 7 9
b 2 4 6 8
c 1 3 7 9
d 2 4 6 8
e 5
f 2 4 6 8
g 1 3 7 9
h 2 4 6 8
i 1 3 7 9
下面条件:
a+b+c被3整除
cd被4整除
d+e&
编程之美:第四章 数字之趣 4.10数字哑谜和回文
最新推荐文章于 2016-12-06 12:52:42 发布