趣味編程題整理及答案_第1頁
趣味編程題整理及答案_第2頁
趣味編程題整理及答案_第3頁
趣味編程題整理及答案_第4頁
趣味編程題整理及答案_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1.抓交通肇事犯一輛卡車違反交通規(guī)則,撞人后逃跑。現(xiàn)場有三人目擊事件,但都沒有記住車號,只記下車號的一些特征。甲說:牌照的前兩位數(shù)字是相同的;乙說:牌照的后兩位數(shù)字是相同的,但與前兩位不同; 丙是數(shù)學(xué)家,他說:四位的車號剛好是一個整數(shù)的平方。請根據(jù)以上線索求出車號。*問題分析與算法設(shè)計按照題目的要求造出一個前兩位數(shù)相同、后兩位數(shù)相同且相互間又不同的整數(shù),然后判斷該整數(shù)是否是另一個整數(shù)的平方。*程序說明與注釋#include#includeint main()int i,j,k,c;for(i=1;i=9;i+) /*i:車號前二位的取值*/for(j=0;j=9;j+) /*j:車號后二位的取

2、值*/if(i!=j) /*判斷二位數(shù)字是否相異*/k=i*1000+i*100+j*10+j; /*計算出可能的整數(shù)*/for(c=31;c*ck;c+); /*判斷該數(shù)是否為另一整數(shù)的平方*/if(c*c=k) printf(LorryNo. is %d.n,k); /*若是,打印結(jié)果*/*運(yùn)行結(jié)果Lorry _No.is 77442百錢百雞問題中國古代數(shù)學(xué)家張丘建在他的算經(jīng)中提出了著名的“百錢買百雞問題”:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁、母、雛各幾何?*問題分析與算法設(shè)計設(shè)雞翁、雞母、雞雛的個數(shù)分別為x,y,z,題意給定共100錢要買百雞,若全買公雞最多

3、買20只,顯然x的值在020之間;同理,y的取值范圍在033之間,可得到下面的不定方程:5x+3y+z/3=100x+y+z=100所以此問題可歸結(jié)為求這個不定方程的整數(shù)解。由程序設(shè)計實(shí)現(xiàn)不定方程的求解與手工計算不同。在分析確定方程中未知數(shù)變化范圍的前提下,可通過對未知數(shù)可變范圍的窮舉,驗(yàn)證方程在什么情況下成立,從而得到相應(yīng)的解。*程序說明與注釋#includeint main()int x,y,z,j=0;printf(Folleing are possible plans to buy 100 fowls with 100 Yuan.n);for(x=0;x=20;x+) /*外層循環(huán)控制

4、雞翁數(shù)*/for(y=0;y=33;y+) /*內(nèi)層循環(huán)控制雞母數(shù)y在033變化*/z=100-x-y; /*內(nèi)外層循環(huán)控制下,雞雛數(shù)z的值受x,y的值的制約*/if(z%3=0&5*x+3*y+z/3=100)/*驗(yàn)證取z值的合理性及得到一組解的合理性*/printf(%2d:cock=%2d hen=%2d chicken=%2dn,+j,x,y,z);3三色球問題若一個口袋中放有12個球,其中有3個紅的。3個白的和6個黒的,問從中任取8個共有多少種不同的顏色搭配?*問題分析與算法設(shè)計設(shè)任取的紅球個數(shù)為i,白球個數(shù)為j,則黒球個數(shù)為8-i-j,根據(jù)題意紅球和白球個數(shù)的取值范圍是03,在紅球

5、和白球個數(shù)確定的條件下,黒球個數(shù)取值應(yīng)為8-i-j=6。*程序說明與注釋#includeint main()int i,j,count=0;printf( RED BALL WHITE BALL BLACKBALLn);printf(.n);for(i=0;i=3;i+) /*循環(huán)控制變量i控制任取紅球個數(shù)03*/for(j=0;j=3;j+) /*循環(huán)控制變量j控制任取白球個數(shù)03*/if(8-i-j)=6)printf( %2d: %d %d %dn,+count,i,j,8-i-j);4馬克思手稿中的數(shù)學(xué)題馬克思手稿中有一道趣味數(shù)學(xué)問題:有30個人,其中有男人、女人和小孩,在一家飯館吃飯

6、花了50先令;每個男人花3先令,每個女人花2先令,每個小孩花1先令;問男人、女人和小孩各有幾人?*問題分析與算法設(shè)計設(shè)x,y,z分別代表男人、女人和小孩。按題目的要求,可得到下面的方程:x+y+z=30 (1)3x+2y+z=50 (2)用方程程序求此不定方程的非負(fù)整數(shù)解,可先通過(2)-(1)式得:2x+y=20 (3)由(3)式可知,x變化范圍是010*程序說明與注釋#includeint main()int x,y,z,count=0;printf( Men Women Childrenn);printf(.n);for(x=0;x=10;x+)y=20-2*x; /*x定值據(jù)(3)式求

7、y*/z=30-x-y; /*由(1)式求z*/if(3*x+2*y+z=50) /*當(dāng)前得到的一組解是否滿足式(2)*/printf( %2d: %d %d %dn,+count,x,y,z);5新娘和新郞三對情侶參加婚禮,三個新郞為A、B、C,三個新娘為X、Y、Z。有人不知道誰和誰結(jié)婚,于是詢問了六位新人中的三位,但聽到的回答是這樣的:A說他將和X結(jié)婚;X說她的未婚夫是C;C說他將和Z結(jié)婚。這人聽后知道他們在開玩笑,全是假話。請編程找出誰將和誰結(jié)婚。*問題分析與算法設(shè)計將A、B、C三人用1,2,3表示,將X和A結(jié)婚表示為“X=1”,將Y不與A結(jié)婚表示為“Y!=1”。按照題目中的敘述可以寫出

8、表達(dá)式:x!=1 A不與X結(jié)婚x!=3 X的未婚夫不是Cz!=3 C不與Z結(jié)婚題意還隱含著X、Y、Z三個新娘不能結(jié)為配偶,則有:x!=y且x!=z且y!=z窮舉以上所有可能的情況,代入上述表達(dá)式中進(jìn)行推理運(yùn)算,若假設(shè)的情況使上述表達(dá)式的結(jié)果均為真,則假設(shè)情況就是正確的結(jié)果。*程序說明與注釋#includeint main()int x,y,z;for(x=1;x=3;x+) /*窮舉x的全部可能配偶*/for(y=1;y=3;y+) /*窮舉y的全部可能配偶*/for(z=1;z1 A和B兩人中至少去一人;a+d!=2 A和D不能一起去;a+e+f=2 A、E、F三人中要派兩人去;b+c=0或

9、b+c=2 B和C都去或都不去;c+d=1 C和D兩人中去一個;d+e=0或d=1 若D不去,則E也不去(都不去;或D去E隨便)。上述各表達(dá)式之間的關(guān)系為“與”關(guān)系。窮舉每個人去或不去的各種可能情況,代入上述表達(dá)式中進(jìn)行推理運(yùn)算,使上述表達(dá)式均為“真”的情況就是正確的結(jié)果。*程序說明與注釋#includeint main()int a,b,c,d,e,f;for(a=1;a=0;a-) /*窮舉每個人是否去的所有情況*/for(b=1;b=0;b-) /*1:去 0:不去*/for(c=1;c=0;c-)for(d=1;d=0;d-)for(e=1;e=0;e-)for(f=1;f=0;f-)

10、if(a+b=1&a+d!=2&a+e+f=2&(b+c=0|b+c=2)&c+d=1&(d+e=0|d=1)printf(A will%s be assigned. n,a?:not);printf(B will%s be assigned. n,b?:not);printf(C will%s be assigned. n,c?:not);printf(D will%s be assigned. n,d?:not);printf(E will%s be assigned. n,e?:not);printf(F will%s be assigned. n,f?:not);*運(yùn)行結(jié)果A will

11、 be assigned. (去)B will be assigned. (去)C will be assigned. (去)D will not be assigned. (不去)E will not be assigned. (不去)F will be assigned. (去)750.誰在說謊張三說李四在說謊,李四說王五在說謊,王五說張三和李四都在說謊?,F(xiàn)在問:這三人中到底誰說的是真話,誰說的是假話?*問題分析與算法設(shè)計分析題目,每個人都有可能說的是真話,也有可能說的是假話,這樣就需要對每個人所說的話進(jìn)行分別判斷。假設(shè)三個人所說的話的真假用變量A、B、C表示,等于1表示該人說的是真話;

12、表示這個人說的是假話。由題目可以得到:*張三說李四在說謊 張三說的是真話:a=1&b=0或 張三說的是假話:a=0&b=1*李四說王五在說謊 李四說的是真話:b=1&c=0或 李四說的是假話:b=0&c=1*王五說張三和李四都在說謊 王五說的是真話:c=1&a+b=0或 王五說的是假話:c=0&a+b!=0上述三個條件之間是“與”的關(guān)系。將表達(dá)式進(jìn)行整理就可得到C語言的表達(dá)式:(a&!b|!a&b)&(b&!c|!b&c)&(c&a+b=0|!c&a+b!=0)窮舉每個人說真話或說假話的各種可能情況,代入上述表達(dá)式中進(jìn)行推理運(yùn)算,使上述表達(dá)式均為“真”的情況就是正確的結(jié)果。*程序說明與注釋#i

13、ncludeint main()int a,b,c;for(a=0;a=1;a+)for(b=0;b=1;b+)for(c=0;c=1;c+)if(a&!b|!a&b)&(b&!c|!b&c)&(c&a+b=0|!c&a+b!=0)printf(Zhangsan told a %s.n,a?truth:lie);printf(Lisi told a %s.n,b?truch:lie);printf(Wangwu told a %s.n,c?truch:lie);*運(yùn)行結(jié)果Zhangsan told a lie (張三說假話)Lisi told a truch. (李四說真話)Wangwu to

14、ld a lie. (王五說假話)8黑與白有A、B、C、D、E五人,每人額頭上都帖了一張黑或白的紙。五人對坐,每人都可以看到其它人額頭上的紙的顏色。五人相互觀察后,A說:“我看見有三人額頭上帖的是白紙,一人額頭上帖的是黑紙?!盉說:“我看見其它四人額頭上帖的都是黑紙?!盋說:“我看見一人額頭上帖的是白紙,其它三人額頭上帖的是黑紙?!盌說:“我看見四人額頭上帖的都是白紙。”E什么也沒說?,F(xiàn)在已知額頭上帖黑紙的人說的都是謊話,額頭帖白紙的人說的都是實(shí)話。問這五人誰的額頭是帖白紙,誰的額頭是帖黑紙?*問題分析與算法設(shè)計假如變量A、B、C、D、E表示每個人額頭上所帖紙的顏色,0 代表是黑色,1 代表是

15、白色。根據(jù)題目中A、B、C、D四人所說的話可以總結(jié)出下列關(guān)系:A說: a&b+c+d+e=3|!a&b+c+d+e!=3B說: b&a+c+d+e=0|!b&a+c+d+e!=0C說: c&a+b+d+e=1|!c&a+b+d+e!=1D說: d&a+b+c+e=4|!d&a+b+c+e!=4窮舉每個人額頭所帖紙的顏色的所有可能的情況,代入上述表達(dá)式中進(jìn)行推理運(yùn)算,使上述表達(dá)式為“真”的情況就是正確的結(jié)果。*程序說明與注釋#includeint main()int a,b,c,d,e;for(a=0;a=1;a+) /*黑色:0 白色:1*/for(b=0;b=1;b+) /*窮舉五個人額頭帖

16、紙的全部可能*/for(c=0;c=1;c+)for(d=0;d=1;d+)for(e=0;e=1;e+)if(a&b+c+d+e=3|!a&b+c+d+e!=3)&(b&a+c+d+e=0|!b&a+c+d+e!=0)&(c&a+b+d+e=1|!c&a+b+d+e!=1)&(d&a+b+c+e=4|!d&a+b+c+e!=4)printf(A is pasted a piece of %s paper on his forehead.n,a?white:black);printf(B is pasted a piece of %s paper on his forehead.n,b?whi

17、te:black);printf(C is pasted a piece of %s paper on his forehead.n,c?white:black);printf(D is pasted a piece of %s paper on his forehead.n,d?white:black);printf(E is pasted a piece of %s paper on his forehead.n,e?white:black);*運(yùn)行結(jié)果A is pasted a paper of black paper on his forehead. (黑)B is pasted a

18、paper of black paper on his forehead. (黑)C is pasted a paper of white paper on his forehead. (白)D is pasted a paper of black paper on his forehead. (黑)E is pasted a paper of white paper on his forehead. (白)9誠實(shí)族和說謊族是來自兩個荒島的不同民族,誠實(shí)族的人永遠(yuǎn)說真話,而說謊族的人永遠(yuǎn)說假話。迷語博士是個聰明的人,他要來判斷所遇到的人是來自哪個民族的。迷語博士遇到三個人,知道他們可能是來自誠

19、實(shí)族或說謊族的。為了調(diào)查這三個人是什么族的,博士分別問了他們的問題,這是他們的對話:問第一個人:“你們是什么族?”,答:“我們之中有兩個來自誠實(shí)族?!钡诙€人說:“不要胡說,我們?nèi)齻€人中只有一個是誠實(shí)族的?!钡谌齻€人聽了第二個人的話后說:“對,就是只有一個誠實(shí)族的?!闭埜鶕?jù)他的回答判斷他們分別是哪個族的。*問題分析與算法設(shè)計假設(shè)這三個人分別為A、B、C,若說謊其值為0,若誠實(shí),其值為1。根據(jù)題目中三個人的話可分別列出:第一個人: a&a+b+c=2|!a&a+b+c!=2第二個人: b&a+b+c=1|!b&a+b+c!=1第三個人: c&a+b+c=1|!c&a+b+c!=1利用窮舉法,可以

20、很容易地推出結(jié)果。*程序說明與注釋#includeint main()int a,b,c;for(a=0;a=1;a+) /*窮舉每個人是說謊還是誠實(shí)的全部情況*/for(b=0;b=1;b+) /*說謊:0 誠實(shí):1*/for(c=0;c=1;c+)if(a&a+b+c=2|!a&a+b+c!=2) /*判斷是否滿足題意*/&(b&a+b+c=1|!b&a+b+c!=1)&(c&a+b+c=1|!c&a+b+c!=1)printf(A is a %s.n,a?honest:lier); /*輸出判斷結(jié)果*/printf(B is a %s.n,b?honest:lier);printf(C

21、is a %s.n,c?honest:lier);*運(yùn)行結(jié)果A is a lier (說謊族)B is a lier (說謊族)C is a lier (說謊族)10 角谷猜想日本一位中學(xué)生發(fā)現(xiàn)一個奇妙的“定理”,請角谷教授證明,而教授無能為力,于是產(chǎn)生角谷猜想。猜想的內(nèi)容是:任給一個自然數(shù),若為偶數(shù)除以2,若為奇數(shù)則乘3加1,得到一個新的自然數(shù)后按照上面的法則繼續(xù)演算,若干次后得到的結(jié)果必然為1。請編程驗(yàn)證。*問題分析與算法設(shè)計本題是一個沿未獲得一般證明的猜想,但屢試不爽,可以用程序驗(yàn)證。題目中給出的處理過程很清楚,算法不需特殊設(shè)計,可按照題目的敘述直接進(jìn)行證。*程序說明與注釋#includeint main()int n,count=0;printf(Please enter number:);scanf(%d,&n); /*輸入任一整數(shù)*/doif(n%2)n=n*3+1; /*若為奇數(shù),n乘3加1*/printf(%d:%d*3+1=%dn,+count,(n-1)/3,n);elsen/=2; /*若為偶數(shù)n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論