纸笔的力量
来源:互联网 发布:手机破解软件社区 编辑:程序博客网 时间:2024/04/29 06:01
对Mathematica着迷了,虽然我知道这热情不会持续多久。还是喜欢在解决问题中学习,这次是Project Euler的第38问。
提问:一个数依次×1,×2,……把所得连接成一个9位数,如果这个9位数正好是1到9的一个组合,则称其为原数的pandigital数。
回答:
这段代码自己都觉得有点对不住观众,于是到论坛去取经。果然又找到了one-liner。
不过最让人惊叹的还是占着沙发的老兄,这哥们自豪地写道“我已经用纸和笔解决了”。这是Project Euler界的最高荣誉了。
他这样分析道:
我们已经知道9的pandigital数是918273645了,我们要找的数应该大于等于它。
- 既然pandigital数是由×1,×2,……连接而来,那么最大的pandigital数必定以9开头(因为它要大于等于918273645);
- 它不可能是9开头的两位数9[0-9],这种数的pandigital数要么是8位,要么是11位;
- 它不可能是9开头的三位数9[0-9][0-9],这种数的pandigital数要么是7位,要么是11位;
- 它不可能大于100,000,这种数的pandigital数位数肯定多于9位;
所以,我们要寻找的数只能是9开头的四位数9[0-9][0-9][0-9]。
- 它不含0,因为0乘任何数仍为0,而该数的pandigital数只含1到9;
- 它的各位均不同,否则×1时就会产生相同的数;
- 它必然不含1,因为×2的时候会产生1,谁让你9打头呢;
- 它的次高位不会是5以上,因为×2的时候会出现9,与×1的时候的9重复(9[5-9][2-9][2-9]×2 = 19xxx);
- 它的次高位不会是4,因为×2的时候会出现两个8或者一个9(94[2-9][2-9]×2 = 18[8-9]xx);
现在看来,可能是数只能是9[2-3][2-7][2-7]了。我们试试93[2-7][2-7]:
- 它的第3位不会是7,因为×2的时候会出现7,与×1时重合(937[2-7]×2 = 187xx);
- 它的第3位不会是6,因为×1的时候曾出现3,所以×2时不能有进位(936[2-4]×2 = 1872x,x必为偶数,其pandigital数缺5);
- 它的第3位不会是5,因为×2的时候会出现两个1或者一个0(935[2-7]×2 = 187[0-1]x);
- 它的第3位不会是4,因为×2的时候会出现两个8或者一个9(934[2-7]×2 = 186[8-9]x);
- 它的第3位不会是3,因为出现了两个3(933[2-7]);
我们试试9327吧:
9327 × 1 = 9327
9327 × 2 = 18654
就是它了!
- 纸笔的力量
- 简洁的力量
- Google的力量
- 习惯的力量 (zz)
- 开源的力量.
- 用上所有的力量
- 心态的力量
- 读六西格玛的力量
- 域名的力量
- 开发的驱动力量
- 没有力量的步伐
- 音乐的力量
- 倾听的力量[收藏]
- 故事的力量!!
- 算法的力量
- 数组的力量
- 神化的力量!
- 李开复:算法的力量
- poj3299
- (备忘)Oracle参数文件之pfile(sid).oraspfile(sid).ora
- Linux 内核编译步骤
- webwork一个简单的例子
- 如何为嵌入式开发建立交叉编译环境
- 纸笔的力量
- 关于构造方法与对象的创建
- IDH最低配置
- lex与yacc之lex符号表示例
- usleep使用
- top命令详解
- Linux命令缩写的解释
- 双向链表Class-template
- 用C#编写ActiveX控件