拋磚引玉
在數(shù)字王國里,有很多數(shù)字都是有規(guī)律的。比如回文數(shù),就像回文詩一樣,倒著念和正著念是一樣的。1991就是一個(gè)回文數(shù),1991加上11等于2002,也是回文數(shù);2002加上110等于2112,又是一個(gè)回文數(shù)。
兩位的回文數(shù)有9個(gè):11,22,33,44,55,66,77,88,99。三位的呢?有90個(gè),不在這里列舉了,感興趣的朋友可以自己寫一寫。
回文數(shù)很有趣吧,但接下來要講的水仙花數(shù),不僅名字好聽,而且也更有意思。水仙花數(shù)的特色在于,它是一個(gè)nn位數(shù)(n≥3),它每個(gè)位上的數(shù)字的n次冪之和等于它本身。比如153,1^3+5^3+3^3=153。除了153,還有哪些數(shù)是水仙花數(shù)呢?
神秘登場(chǎng)
常見的水仙花數(shù)有:
三位的水仙花數(shù)共有4個(gè):153,370,371,407;
四位的水仙花數(shù)共有3個(gè):1634,8208,9474;
五位的水仙花數(shù)共有3個(gè):54748,92727,93084;
六位的水仙花數(shù)只有1個(gè):548834;
七位的水仙花數(shù)共有4個(gè):1741725,4210818,9800817,9926315;
八位的水仙花數(shù)共有3個(gè):24678050,24678051,88593477;
..
上面列的,當(dāng)然是前人經(jīng)過多次運(yùn)算得出的結(jié)果。可是,你知道水仙花數(shù)是怎樣被找到的嗎?且不說位數(shù)多的,就拿三位水仙花數(shù)來說,若是沒有合適的方法,要想在所有的三位數(shù)中找出來這四個(gè)水仙花數(shù),也是很浪費(fèi)時(shí)間的。
有人可能說,對(duì)于三位的水仙花數(shù),可以設(shè)它的百位是a,十位是b,個(gè)位是c,則有a^3+b^3+c^3=a*100+b*10+c成立,然后一個(gè)一個(gè)試不就成了。
這是一個(gè)可行的辦法,但是可行性太差,還是看看其他的辦法吧。
揭秘事實(shí)
我們知道,上述方法中,從最小的三位數(shù)開始試,那么對(duì)應(yīng)的a,b,c分別為1,0,0,判斷方程a^3+b^3+c^3=a*100+b*10+c是否成立;然后再把101代入方程中測(cè)試..不斷取數(shù),反復(fù)測(cè)試,直到取到999為止。
按照上面的方法,我們需要進(jìn)行900次的測(cè)試才能列出三位數(shù)中的所有水仙花數(shù),這個(gè)工程..是不是太大了?人腦算太慢了,那就用電腦吧。電腦能高速運(yùn)算,迅速幫我們解決問題。但是電腦運(yùn)算需要程序,而程序是人編的,人不給電腦編程,它又沒有思維,怎么知道水仙花數(shù)是什么東西。
因此,我們必須事先告訴電腦,列出水仙花數(shù)的過程和方法,在程序設(shè)計(jì)中我們稱之為算法。算法的設(shè)計(jì)分兩個(gè)內(nèi)容:一是尋找一種方法,二是描述實(shí)現(xiàn)這個(gè)方法的步驟。那么,我們應(yīng)該怎樣來實(shí)現(xiàn)尋找水仙花數(shù)呢?
首先,我們要思考方程中a,b,c的值是從哪里來的。對(duì)于一個(gè)三位數(shù),電腦不知道怎樣分離出各位上的數(shù)字,所以需要向電腦說明如何分離。
其次,我們要告訴電腦怎樣對(duì)方程是否成立進(jìn)行判斷,如果方程成立,則顯示出這個(gè)數(shù)。
整個(gè)算法思想:讓計(jì)算機(jī)從100到999依次進(jìn)行百位、十位和個(gè)位數(shù)字的分離,然后對(duì)方程的成立與否進(jìn)行判斷,如果成立就顯示這個(gè)數(shù)字,然后取下一個(gè)數(shù)字進(jìn)行判斷。
我們把這個(gè)算法編成程序,計(jì)算機(jī)就能快速找出三位數(shù)中的水仙花數(shù)了。
趣味推斷
除了上述算法,還有其他的算法嗎?
上述算法是從數(shù)字出發(fā)分離出a,b,c,那么我們能不能換個(gè)角度從a,b,c拼出數(shù)字呢?作為百位上的a可以取1~9之間的任意數(shù),而b和c可以取0~9之間的任意數(shù),從已知的a,b,c,看100*a+10*b+c=a^3+b^3+c^3是否成立,如果相等就輸出。