国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C語言中找特殊數(shù)的編程方法探索

2015-12-21 10:49屠新兵
電腦知識與技術(shù) 2015年27期
關(guān)鍵詞:回文質(zhì)數(shù)水仙花

屠新兵

摘要:在計(jì)算機(jī)編程語言的學(xué)習(xí)過程中,我們會遇到一些特殊數(shù)的編程處理方法,包括質(zhì)數(shù)、完全數(shù)、水仙花數(shù)、同構(gòu)數(shù)、回文數(shù)等等。該文主要以C語言編程為例,對這些特殊數(shù)的編程方法進(jìn)行探索,讓大家對循環(huán)語句和分支語句有進(jìn)一步的了解。

關(guān)鍵詞:C語言;特殊數(shù)

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)28-0081-02

在計(jì)算機(jī)編程語言的學(xué)習(xí)過程中,我們會遇到一些特殊數(shù)的編程處理方法,包括質(zhì)數(shù)、完全數(shù)、水仙花數(shù)、同構(gòu)數(shù)、回文數(shù)等等。當(dāng)我們剛聽到這些名詞的時(shí)候,既感到陌生,又覺得好奇,有一種立即解決問題的沖動(dòng)。當(dāng)我們對這些特殊數(shù)進(jìn)行分析時(shí)會發(fā)現(xiàn),它們中很多都可以用一種最原始的方法——窮舉法來解決,有些則不一定。而窮舉法是最常用的一種方法,是C語言中的一個(gè)重要知識點(diǎn),在近幾年江蘇省的職校計(jì)算機(jī)對口單招考試中也是一個(gè)重要考點(diǎn)。如果掌握了其要領(lǐng),實(shí)現(xiàn)起來就會得心應(yīng)手,本文主要以C語言編程為例,對這些特殊數(shù)的編程方法進(jìn)行探索,希望給參加江蘇省的職校計(jì)算機(jī)對口單招考試的學(xué)生及編程愛好者帶來一定的幫助。

對于這些特殊數(shù)的處理,很多都可以用窮舉法來解決。我們先來了解一下,什么是窮舉法。窮舉法的基本思想是根據(jù)題目的部分條件確定答案的大致范圍,并在此范圍內(nèi)對所有可能的情況逐一驗(yàn)證,直到全部情況驗(yàn)證完畢。若某個(gè)情況驗(yàn)證符合題目的全部條件,則為本問題的一個(gè)解;若全部情況驗(yàn)證后都不符合題目的全部條件,則本題無解。下面通過幾個(gè)實(shí)例,來對特殊數(shù)編程處理方法進(jìn)行探索。

1質(zhì)數(shù)

質(zhì)數(shù)的定義:除了1和本身外,不能被其他任何自然數(shù)整除的自然數(shù)叫做質(zhì)數(shù),又叫做素?cái)?shù)。

例:編一函數(shù)int fun(int x),判斷x是否為質(zhì)數(shù)。

分析:要處理好該問題,就要從定義入手,定義強(qiáng)調(diào)質(zhì)數(shù)只能被1和本身整除,不能被其他任何自然數(shù)整除,我們就要圍繞這個(gè)來進(jìn)行驗(yàn)證,也就是說:除了1和本身以外,如果能找到其他能整除的自然數(shù),就不是質(zhì)數(shù)。本題就是典型的窮舉法的例子。函數(shù)如下:

int fun(int x)

{ int i;

for(i=2;i

if(x%i==0) return 0; /* 能被其他自然數(shù)整除就不是質(zhì)數(shù) */

return 1;

}

拓展:僅判斷一個(gè)數(shù)是否為質(zhì)數(shù),是比較簡單的,實(shí)際應(yīng)用中往往要找出多個(gè)質(zhì)數(shù),這就需要在循環(huán)的外面再嵌套一個(gè)循環(huán),用于控制查找的范圍,再將質(zhì)數(shù)作相應(yīng)的處理即可。驗(yàn)證哥德巴赫猜想則是兩次判斷質(zhì)數(shù)的例子。

2 完全數(shù)

完全數(shù)的定義:如果一個(gè)數(shù)恰好等于它的所有的真因子(即除了自身以外的約數(shù))之和,則稱該數(shù)為完全數(shù),又稱完美數(shù)或完備數(shù)。(如:6=1+2+3,28=1+2+4+7+14,6和28都是完全數(shù))

例:編一函數(shù)fun(int x),判斷x是否為完全數(shù)。

分析:本題的關(guān)鍵就是將x以內(nèi)的所有數(shù)過濾一下,從中找出真因子進(jìn)行累加,最后看累加的和與原數(shù)是否相等。本題也是典型的窮舉法的例子。函數(shù)如下:

int fun(int x)

{ int i,s=1;

for(i=2;i<=x/2;i++)

if(x%i==0) s+=i; /* 能整除的累加 */

return s==x;

}

拓展:如果需要找出多個(gè)完全數(shù),就要確定查找的范圍,在循環(huán)外再嵌套一個(gè)循環(huán)。

3水仙花數(shù)

水仙花數(shù)的定義:水仙花數(shù)是指一個(gè) n 位數(shù) ( n≥3 ),它的每個(gè)位上的數(shù)字的 n(以3為例) 次冪之和等于它本身,又稱阿姆斯特朗數(shù)。(例如: 153=1^3 + 5^3+ 3^3,153就是一個(gè)水仙花數(shù))。

例:編一函數(shù)int fun(int x),判斷x是否為水仙花數(shù)(3次冪)。

分析:本題的關(guān)鍵就是要找出x的每一位數(shù)y,如果x僅僅是三位數(shù),可以分別求出百位數(shù)、十位數(shù)和個(gè)位數(shù),用b=x/100;s=x/10%10;g=x%10;可以解決,如果不知道x的位數(shù),可以循環(huán)求出它的最低位,再求出最低位的立方和來實(shí)現(xiàn)。函數(shù)如下:

int fun(int x)

{ int i,n=x,a,s=0;

while(x)

{a=x%10; /* 取出最低位 */

s+=a*a*a; /* 求出最低位立方和 */

x/=10; /* x去掉最低位 */

}

return s==n; /* 原數(shù)n與各位數(shù)字立方和s相等就是水仙花數(shù) */

}

拓展:同樣若要找出若干個(gè)水仙花數(shù),就是在循環(huán)外再嵌套一個(gè)循環(huán),用于控制查找的范圍,再把水仙數(shù)作相應(yīng)處理,而查找并判斷的過程則是窮舉法。

4同構(gòu)數(shù)

同構(gòu)數(shù)的定義:同構(gòu)數(shù)是出現(xiàn)在它的平方的右邊的數(shù)。(例如,6出現(xiàn)在其平方數(shù)36的右邊,76出現(xiàn)在其平方數(shù)5776的右邊,6與76都是同構(gòu)數(shù)。)

例:編一函數(shù)fun(int x,int a[]),找出x(x<1000)以內(nèi)的所有同構(gòu)數(shù),存放于a數(shù)組,返回同構(gòu)數(shù)的個(gè)數(shù)。

分析:本題就是對x以內(nèi)所有的數(shù)進(jìn)行過濾,求出x的平方,看看是否出現(xiàn)在平方數(shù)的右邊,同時(shí)要注意,x可能是一位數(shù)、兩位數(shù)或三位數(shù),就要分別用到%10,%100,%1000。函數(shù)如下:

int fun(int x,int a[])

{ int i,y,m=10,n=0;

for(i=2;i

{ if(i>10)m=100;

if(i>100)m=1000;

y=x*x;

if(y%m==x)a[n++]=x;}

return n;

}

拓展:對于同構(gòu)數(shù),要根據(jù)自身的位數(shù)來確定相應(yīng)的m,即除以m取余得到的數(shù)的位數(shù)與其一致,當(dāng)x的范圍擴(kuò)大時(shí),m也要隨之發(fā)生變化。

5回文數(shù)

回文數(shù)的定義:正讀與反讀都一樣的數(shù)。(如:1,11,121,1221等等)

例:編一函數(shù)int fun(int x),判斷x是否為回文數(shù)。

分析:要判斷x是否為回文數(shù),首先要求出x的逆序數(shù),然后判斷其逆序數(shù)是否與本身相等。函數(shù)如下:

int fun(int x)

{ int y=0,z=x;

while(x)

{ y=y*10+x%10;

x/=10;

}

return y==z;

}

拓展:實(shí)際應(yīng)用中,需要判斷多個(gè)回文數(shù),那就需要對多個(gè)數(shù)逐一進(jìn)行判斷。同時(shí),將一個(gè)非回文數(shù),加上該數(shù)的逆序數(shù)后,就可能成為回文數(shù)。若仍然是非回文數(shù),則重復(fù)若干次上述步驟,總能得到回文數(shù)。

以上特殊數(shù)的處理方法是中職學(xué)生在實(shí)際應(yīng)用中,經(jīng)常遇到的,也是近幾年江蘇省計(jì)算機(jī)專業(yè)對口單招考試中主要考點(diǎn),主要考查學(xué)生對循環(huán)和分支語句的靈活運(yùn)用。需要大家平時(shí)多注意積累,多動(dòng)腦筋,記住特殊數(shù)的處理方法,并將方法靈活運(yùn)用到平時(shí)的學(xué)習(xí)中去。中職學(xué)生包括廣大編程愛好者要多總結(jié),從而對循環(huán)及分支語句的使用能有進(jìn)一步的了解。當(dāng)然編程方法不唯一,希望大家八仙過海,各顯神通。

參考文獻(xiàn):

[1] 李秉璋.C語言程序設(shè)計(jì)與訓(xùn)練[M].大連:理工大學(xué)出版社,2011.

[2] 孔線麗.計(jì)算機(jī)專業(yè)綜合理論復(fù)習(xí)用書 [M].2版.北京:原子能出版社,2007.

猜你喜歡
回文質(zhì)數(shù)水仙花
變型數(shù)獨(dú)4月挑戰(zhàn)賽
奇妙的質(zhì)數(shù)約定
怎么教讓質(zhì)數(shù)學(xué)習(xí)更有趣
VB學(xué)習(xí)天地
水仙花
養(yǎng)水仙花
回文的美
有趣的回文數(shù)
巧記質(zhì)數(shù)