我的位置: 首頁(yè) > 學(xué)習(xí)專(zhuān)區(qū) > .NET技術(shù) > C語(yǔ)言實(shí)例 九位累進(jìn)可除數(shù)

C語(yǔ)言實(shí)例 九位累進(jìn)可除數(shù)

2013-06-20 10:05:02
來(lái)源:
[導(dǎo)讀] 求九位累進(jìn)可除數(shù)。所謂九位累進(jìn)可除數(shù)就是這樣一個(gè)數(shù):這個(gè)數(shù)用到1到9這九個(gè)數(shù)字組成,每個(gè)數(shù)字剛好只出現(xiàn)一次。這九個(gè)位數(shù)的前兩位能被2

求九位累進(jìn)可除數(shù)。所謂九位累進(jìn)可除數(shù)就是這樣一個(gè)數(shù):這個(gè)數(shù)用到1到9這九個(gè)數(shù)字組成,每個(gè)數(shù)字剛好只出現(xiàn)一次。這九個(gè)位數(shù)的前兩位能被2整除,前三位能被3整除......前N位能被N整除,整個(gè)九位數(shù)能被9整除。

*問(wèn)題分析與算法設(shè)計(jì)

問(wèn)題本身可以簡(jiǎn)化為一個(gè)窮舉問(wèn)題:只要窮舉每位數(shù)字的各種可能取值,按照題目的要求對(duì)窮舉的結(jié)果進(jìn)行判斷就一定可以得到正確的結(jié)果。

問(wèn)題中給出了“累進(jìn)可除”這一條件,就使得我們可以在窮舉法中加入條件判斷。在窮舉的過(guò)程中,當(dāng)確定部分位的值后,馬上就判斷產(chǎn)生的該部分是否符合“累進(jìn)可除”條件,若符合,則繼續(xù)窮舉下一位數(shù)字;否則剛剛產(chǎn)生的那一位數(shù)字就是錯(cuò)誤的。這樣將條件判斷引入到窮舉法之中,可以盡可能早的發(fā)現(xiàn)矛盾,盡早地放棄不必要窮舉的值,從而提高程序的執(zhí)行效率。

為了達(dá)到早期發(fā)現(xiàn)矛盾的目的,不能采用多重循環(huán)的方法實(shí)行窮舉,那樣編出的程序質(zhì)量較差。程序中使用的算法不再是窮舉法,而是回朔法。

*程序說(shuō)明與注釋

#include

#define NUM 9

int a[NUM+1];

int main()

{

int i,k,flag,not_finish=1;

long sum;

i=1;

/*i:正在處理的數(shù)組元素,表示前i-1個(gè)元素已經(jīng)滿(mǎn)足要求,正處理的是第i個(gè)元素*/

a[1]=1; /*為元素a[1]設(shè)置初值*/

while(not_finish) /*not_finish=1:處理沒(méi)有結(jié)束*/

{

while(not_finish&&i<=NUM)

{

for(flag=1,k=1;flag&&k

if(a[k]==a[i])flag=0; /*判斷第i個(gè)元素是否與前i-1個(gè)元素重復(fù)*/

for(sum=0,k=1;flag&&k<=i;k++)

{

sum=10*sum+a[k];

if(sum%k)flag=0; /*判斷前k位組成的整數(shù)是否能被k整除*/

}

if(!flag) /*flag=0:表示第i位不滿(mǎn)足要求,需要重新設(shè)置*/

{

if(a[i]==a[i-1]) /*若a[i]的值已經(jīng)經(jīng)過(guò)一圈追上a[i-1]*/

{

i--; /*i值減1,退回處理前一個(gè)元素*/

if(i>1&&a[i]==NUM)

a[i]=1; /*當(dāng)?shù)趇位的值達(dá)到NUM時(shí),第i位的值取1*/

else if(i==1&&a[i]==NUM) /*當(dāng)?shù)?位的值達(dá)到NUM時(shí)結(jié)束*/

not_finish=0; /*置程序結(jié)束標(biāo)記*/

else a[i]++; /*第i位的值取下一個(gè),加1*/

}

else if(a[i]==NUM) a[i]=1;

else a[i]++;

}

else /*第i位已經(jīng)滿(mǎn)足要求,處理第i+1位*/

if(++i<=NUM) /*i+1處理下一元素,當(dāng)i沒(méi)有處理完畢時(shí)*/

if(a[i-1]==NUM) a[i]=1; /*若i-1的值已為NUM,則a[i]的值為1*/

else a[i]=a[i-1]+1; /*否則,a[i]的初值為a[i-1]值的"下一個(gè)"值*/

}

if(not_finish)

{

printf("\nThe progressire divisiable number is:");

for(k=1;k<=NUM;k++) /*輸出計(jì)算結(jié)果*/

printf("%d",a[k]);

if(a[NUM-1]

else a[NUM-1]=1;

not_finish=0;

printf("\n");

}

}

}

*運(yùn)行結(jié)果

The progressire divisible number is: 381654729

*思考題

求N位累進(jìn)可除數(shù)。用1到9這九個(gè)數(shù)字組成一個(gè)N(3<=N<=9)位數(shù),位數(shù)字的組成不限,使得該N位數(shù)的前兩位能被2整除,前3位能被3整除,......,前N位能被N整除。求滿(mǎn)足條件的N位數(shù)。

深圳北大青鳥(niǎo)

評(píng)論
熱點(diǎn)專(zhuān)題
>>
相關(guān)文章推薦
>>
北大青鳥(niǎo)零基礎(chǔ)學(xué)什么好 java全棧在哪里學(xué) Java全棧工程師 深圳北大青鳥(niǎo)有什么課程? 北美大數(shù)據(jù)是干什么的 互聯(lián)網(wǎng)架構(gòu)師是什么 北美大數(shù)據(jù)難不難? 優(yōu)秀學(xué)員表彰 深圳IT培訓(xùn)哪里好 電子商務(wù)是做什么的 校園招聘 學(xué)歷可以學(xué)編程嗎 C和C++的區(qū)別 前端找工作 WEB前端培訓(xùn)學(xué)了好嗎 人工智能與Python關(guān)系 零基礎(chǔ)大專(zhuān)學(xué)歷學(xué)北美大數(shù)據(jù) 網(wǎng)絡(luò)工程專(zhuān)業(yè)好不好學(xué) 女生零基礎(chǔ)學(xué)軟件編程好不好 廉江學(xué)軟件工程怎么樣 軟件開(kāi)發(fā)培訓(xùn)去哪好 解程序是什么? 深圳嘉華學(xué)哪個(gè)技術(shù)前景更好 人工智能學(xué)什么 北大青鳥(niǎo)學(xué)java好不好 北大青鳥(niǎo)Java 學(xué)ui設(shè)計(jì)好找工作嗎 學(xué)UI設(shè)計(jì)需要什么基礎(chǔ) UI設(shè)計(jì)可以自學(xué)嗎 學(xué)會(huì)北美大數(shù)據(jù)可以做什么 學(xué)UI設(shè)計(jì)怎么樣 學(xué)習(xí)UI技術(shù)能做什么? JAVA大數(shù)據(jù)入學(xué)條件是什么 學(xué)UI可以做什么工作 學(xué)習(xí)大數(shù)據(jù)專(zhuān)業(yè)技術(shù)多久比較好 UI設(shè)計(jì)適合什么工作 女孩子適合學(xué)軟件開(kāi)發(fā)嗎 學(xué)UI需要什么學(xué)歷 web前端培訓(xùn) 學(xué)習(xí)軟件開(kāi)發(fā)會(huì)很難? PPT技能大賽 JAVA大數(shù)據(jù)怎么樣 普工學(xué)什么好 拔河賽 軟件測(cè)試培訓(xùn)哪家好
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
亚洲国产精品原创巨作AV无遮挡 | 亚洲人成网线在线播放午夜 | 亚洲一区二区三区不卡国产_亚洲 | 亚洲丰满熟女一区二区v | 一级全黄大片在线观看播放 | 午夜亚洲国产理论片中文飘花 |