抛砖引玉
在数字王国里,有很多数字都是有规律的。比如回文数,就像回文诗一样,倒着念和正着念是一样的。1991就是一个回文数,1991加上11等于2002,也是回文数;2002加上110等于2112,又是一个回文数。
两位的回文数有9个:11,22,33,44,55,66,77,88,99。三位的呢?有90个,不在这里列举了,感兴趣的朋友可以自己写一写。
回文数很有趣吧,但接下来要讲的水仙花数,不仅名字好听,而且也更有意思。水仙花数的特色在于,它是一个nn位数(n≥3),它每个位上的数字的n次幂之和等于它本身。比如153,1^3+5^3+3^3=153。除了153,还有哪些数是水仙花数呢?
神秘登场
常见的水仙花数有:
三位的水仙花数共有4个:153,370,371,407;
四位的水仙花数共有3个:1634,8208,9474;
五位的水仙花数共有3个:54748,92727,93084;
六位的水仙花数只有1个:548834;
七位的水仙花数共有4个:1741725,4210818,9800817,9926315;
八位的水仙花数共有3个:24678050,24678051,88593477;
..
上面列的,当然是前人经过多次运算得出的结果。可是,你知道水仙花数是怎样被找到的吗?且不说位数多的,就拿三位水仙花数来说,若是没有合适的方法,要想在所有的三位数中找出来这四个水仙花数,也是很浪费时间的。
有人可能说,对于三位的水仙花数,可以设它的百位是a,十位是b,个位是c,则有a^3+b^3+c^3=a*100+b*10+c成立,然后一个一个试不就成了。
这是一个可行的办法,但是可行性太差,还是看看其他的办法吧。
揭秘事实
我们知道,上述方法中,从最小的三位数开始试,那么对应的a,b,c分别为1,0,0,判断方程a^3+b^3+c^3=a*100+b*10+c是否成立;然后再把101代入方程中测试..不断取数,反复测试,直到取到999为止。
按照上面的方法,我们需要进行900次的测试才能列出三位数中的所有水仙花数,这个工程..是不是太大了?人脑算太慢了,那就用电脑吧。电脑能高速运算,迅速帮我们解决问题。但是电脑运算需要程序,而程序是人编的,人不给电脑编程,它又没有思维,怎么知道水仙花数是什么东西。
因此,我们必须事先告诉电脑,列出水仙花数的过程和方法,在程序设计中我们称之为算法。算法的设计分两个内容:一是寻找一种方法,二是描述实现这个方法的步骤。那么,我们应该怎样来实现寻找水仙花数呢?
首先,我们要思考方程中a,b,c的值是从哪里来的。对于一个三位数,电脑不知道怎样分离出各位上的数字,所以需要向电脑说明如何分离。
其次,我们要告诉电脑怎样对方程是否成立进行判断,如果方程成立,则显示出这个数。
整个算法思想:让计算机从100到999依次进行百位、十位和个位数字的分离,然后对方程的成立与否进行判断,如果成立就显示这个数字,然后取下一个数字进行判断。
我们把这个算法编成程序,计算机就能快速找出三位数中的水仙花数了。
趣味推断
除了上述算法,还有其他的算法吗?
上述算法是从数字出发分离出a,b,c,那么我们能不能换个角度从a,b,c拼出数字呢?作为百位上的a可以取1~9之间的任意数,而b和c可以取0~9之间的任意数,从已知的a,b,c,看100*a+10*b+c=a^3+b^3+c^3是否成立,如果相等就输出。