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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1.抓交通肇事犯一輛卡車違反交通規(guī)則,撞人后逃跑。現(xiàn)場有三人目擊事件,但都沒有記住車號,只記下車號的一些特征。甲說:牌照的前兩位數(shù)字是相同的;乙說:牌照的后兩位數(shù)字是相同的,但與前兩位不同;丙是數(shù)學家,他說:四位的車號剛好是一個整數(shù)的平方。請根據(jù)以上線索求出車號。*問題分析與算法設計按照題目的要求造出一個前兩位數(shù)相同、后兩位數(shù)相同且相互間又不同的整數(shù),然后判斷該整數(shù)是否是另一個整數(shù)的平方。*程序說明與注釋#include<>#include<>intmain(){inti,j,k,c;for(i=1;i<=9;i++)/*i: 車號前二位的取值*/for(j=0;j<=9;j++)/*j: 車號后二位的取值*/if(i!=j)/*判斷二位數(shù)字是否相異*/{k=i*1000+i*100+j*10+j;/*計算出可能的整數(shù)*/for(c=31;c*c<k;c++);/*判斷該數(shù)是否為另一整數(shù)的平方*/if(c*c==k)printf("Lorry -No.is%d.\n",k);/*若是,打印結果*/}}*運行結果Lorry77442.百錢百雞問題中國古代數(shù)學家張丘建在他的《算經(jīng)》中提出了著名的“百錢買百雞問題”:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁、母、雛各幾何?*問題分析與算法設計設雞翁、雞母、雞雛的個數(shù)分別為x,y,z,題意給定共100錢要買百雞,若全買公雞最多買20只,顯然x的值在0~20之間;同理,y的取值范圍在0~33之間,可得到下面的不定方程:5x+3y+z/3=100x+y+z=100所以此問題可歸結為求這個不定方程的整數(shù)解。由程序設計實現(xiàn)不定方程的求解與手工計算不同。在分析確定方程中未知數(shù)變化范圍的前提下,可通過對未知數(shù)可變范圍的窮舉,驗證方程在什么情況下成立,從而得到相應的解。*程序說明與注釋#include<>intmain(){intx,y,z,j=0;printf("Folleingarepossibleplanstobuy100fowlswith100Yuan.\n");for(x=0;x<=20;x++)/*外層循環(huán)控制雞翁數(shù)*/for(y=0;y<=33;y++)/*內層循環(huán)控制雞母數(shù)y在0~33變化*/{z=100-x-y;/*內外層循環(huán)控制下,雞雛數(shù)z的值受x,y的值的制約*/if(z%3==0&&5*x+3*y+z/3==100)/*驗證取z值的合理性及得到一組解的合理性*/printf("%2d:cock=%2dhen=%2dchicken=%2d\n",++j,x,y,z);}}3.三色球問題多少種不同的顏色搭配?*問題分析與算法設計設任取的紅球個數(shù)為i,白球個數(shù)為j,則黒球個數(shù)為8-i-j,根據(jù)題意紅球和白球個數(shù)的取值范圍是0~3,在紅球和白球個數(shù)確定的條件下,黒球個數(shù)取值應為8-i-j<=6。*程序說明與注釋#include<>intmain(){inti,j,count=0;printf("REDBALLWHITEBALLBLACKBALL\n");printf(” .. \n”);for(i=0;i<=3;i++)/*循環(huán)控制變量i控制任取紅球個數(shù) 0—3*/for(j=0;j<=3;j++)/*循環(huán)控制變量j控制任取白球個數(shù) 0—3*/if((8-i-j)<=6)printf("%2d:%d%d%d\n",++count,i,j,8-i-j);}4.馬克思手稿中的數(shù)學題馬克思手稿中有一道趣味數(shù)學問題:有30個人,其中有男人、女人和小孩,在一家飯館吃飯花了50先令;每個男人花3先令,每個女人花2先令,每個小孩花1先令;問男人、女人和小孩各有幾人?*問題分析與算法設計設x,y,z分別代表男人、女人和小孩。按題目的要求,可得到下面的方程:x+y+z=30(1)3x+2y+z=50(2)用方程程序求此不定方程的非負整數(shù)解,可先通過(2)-(1)式得:2x+y=20(3)由(3)式可知,x變化范圍是0~10*程序說明與注釋#include<>intmain(){intx,y,z,count=0;printf("MenWomenChildren\n");printf(" \n");for(x=0;x<=10;x++){y=20-2*x;/*x定值據(jù)(3)式求y*/z=30-x-y;/*由(1)式求z*/if(3*x+2*y+z==50)/*當前得到的一組解是否滿足式(2)*/printf("%2d:%d%d%d\n",++count,x,y,z);}}5.新娘和新郞三對情侶參加婚禮,三個新郞為 AB、C,三個新娘為XY、Z。有人不知道誰和誰結婚,于是詢問了六位新人中的三位,但聽到的回答是這樣的: A說他將和X結婚;X說她的未婚夫是C;C說他將和Z結婚。這人聽后知道他們在開玩笑,全是假話。請編程找出誰將和誰結婚。*問題分析與算法設計將ABC三人用1,2,3表示,將X和A結婚表示為“X=1”,將Y不與A結婚表示為“Y!=1”。按照題目中的敘述可以寫出表達式:x!=1A不與X結婚

x!=3X的未婚夫不是Cz!=3C不與Z結婚題意還隱含著X、Y、Z三個新娘不能結為配偶,則有:x!=y且x!=z且y!=z窮舉以上所有可能的情況,代入上述表達式中進行推理運算,若假設的情況使上述表達式的結果均為真,則假設情況就是正確的結果。*程序說明與注釋#include<>intmain()intx,y,z;for(x=1;x<=3;x++)/*窮舉的全部可能配偶*/for(y=1;y<=3;y++)/*窮舉的全部可能配偶*/for(z=1;z<=3;z++)/*for(x=1;x<=3;x++)/*窮舉的全部可能配偶*/for(y=1;y<=3;y++)/*窮舉的全部可能配偶*/for(z=1;z<=3;z++)/*窮舉的全部可能配偶*/if(x!=1&&x!=3&&z!=3&&x!=y&&x!=z&&y!=z)/*判斷配偶是否滿足題意*/printf("Xwillmarryto%c.\n",'A'+x-1);/*打印判斷結果if(x!=1&&x!=3&&z!=3&&x!=y&&x!=z&&y!=z)/*判斷配偶是否滿足題意*/printf("Xwillmarryto%c.\n",'A'+x-1);/*打印判斷結果*/printf("Ywillmarryto%c.\n",'A'+y-1);printf("Zwillmarryto%c.\n",'A'+z-1);*運行結果XwillmarrytoB.(X與B結婚)YwillmarrytoC.(YXwillmarrytoB.(X與B結婚)YwillmarrytoC.(Y與C結婚)ZwillmarrytoA.(Z與A結婚)6.委派任務某偵察隊接到一項緊急任務,要求在 A、B、C、D、E、F六個隊員中盡可能多地挑若干人,但有以下限制條件:A和B兩人中至少去一人;A和D不能一起去;A、E和F三人中要派兩人去;B和C都去或都不去;C和D兩人中去一個;若D不去,則E也不去。問應當讓哪幾個人去?*問題分析與算法設計用A、B、C、D、E、F六個變量表示六個人是否去執(zhí)行任務的狀態(tài),變量的值為 1,則表示該人去;變量的值為0,則表示該人不參加執(zhí)行任務,根據(jù)題意可寫出表達式:a+b>1A和B兩人中至少去一人;a+d!=2A和D不能一起去;a+e+f==2A、E、F三人中要派兩人去;b+c==0或b+c==2B和C都去或都不去;c+d==1C和D兩人中去一個;d+e==0或d==1若D不去,則E也不去(都不去;或D去E隨便)。上述各表達式之間的關系為“與”關系。窮舉每個人去或不去的各種可能情況,代入上述表達式中進行推理運算,使上述表達式均為“真”的情況就是正確的結果。*程序說明與注釋#include<>intmain(){inta,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--)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("Awill%sbeassigned.\n",a?"":"not");printf("Bwill%sbeassigned.\n",b?"":"not");printf("Cwill%sbeassigned.\n",c?"":"not");printf("Dwill%sbeassigned.\n",d?"":"not");printf("Ewill%sbeassigned.\n",e?"":"not");printf("Fwill%sbeassigned.\n",f?"":"not");}}*運行結果Awillbeassigned.(去)Bwillbeassigned.(去)Cwillbeassigned.( 去)Dwillnotbeassigned.( 不去)Ewillnotbeassigned.(不去)Fwillbeassigned.( 去)7.50.誰在說謊張三說李四在說謊,李四說王五在說謊,王五說張三和李四都在說謊?,F(xiàn)在問:這三人中到底誰說的是真話,誰說的是假話?*問題分析與算法設計分析題目,每個人都有可能說的是真話,也有可能說的是假話,這樣就需要對每個人所說的真話;表示這個人說的是假話。由題目可以得到:張三說李四在說謊張三說的是真話: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上述三個條件之間是“與”的關系。將表達式進行整理就可得到 C語言的表達式:(a&&!b||!a&&b)&&(b&&!c||!b&&c)&&(c&&a+b==0||!c&&a+b!=0)窮舉每個人說真話或說假話的各種可能情況,代入上述表達式中進行推理運算,使上述表達式均為“真”的情況就是正確的結果。*程序說明與注釋#include<>intmain(){inta,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("Zhangsantolda%s.\n",a?"truth":"lie");printf("Lisitolda%s.\n",b?"truch":"lie");printf("Wangwutolda%s.\n",c?"truch":"lie");}}運行結果Zhangsantoldalie(張三說假話)Lisitoldatruch.(李四說真話)Wangwutoldalie.( 王五說假話)8.黑與白有A、B、C、D、E五人,每人額頭上都帖了一張黑或白的紙。五人對坐,每人都可以看到其它人額頭上的紙的顏色。五人相互觀察后,A說:“我看見有三人額頭上帖的是白紙,一人額頭上帖的是黑紙?!盉說:“我看見其它四人額頭上帖的都是黑紙?!盋說:“我看見一人額頭上帖的是白紙,其它三人額頭上帖的是黑紙。 ”D說:“我看見四人額頭上帖的都是白紙?!盓什么也沒說。現(xiàn)在已知額頭上帖黑紙的人說的都是謊話,額頭帖白紙的人說的都是實話。問這五人誰的額頭是帖白紙,誰的額頭是帖黑紙?*問題分析與算法設計假如變量ABCD、E表示每個人額頭上所帖紙的顏色, 0代表是黑色,1代表是白色。根據(jù)題目中A、B、CD四人所說的話可以總結出下列關系: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窮舉每個人額頭所帖紙的顏色的所有可能的情況,代入上述表達式中進行推理運算,使上述表達式為“真”的情況就是正確的結果。*程序說明與注釋#include<>intmain()inta,b,c,d,e;for(a=0;a<=1;a++)/*黑色:0白色:1*/for(b=0;b<=1;b++)/*窮舉五個人額頭帖紙的全部可能*/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("Aispastedapieceof%spaperonhisforehead.\n",a?"white":"black");printf("Bispastedapieceof%spaperonhisforehead.\n",b?"white":"black");printf("Cispastedapieceof%spaperonhisforehead.\n",c?"white":"black");printf("Dispastedapieceof%spaperonhisforehead.\n",d?"white":"black");printf("Eispastedapieceof%spaperonhisforehead.\n",e?"white":"black");}}*運行結果TOC\o"1-5"\h\zAispastedapaperofblackpaperonhisforehead.( 黑)Bispastedapaperofblackpaperonhisforehead.( 黑)Cispastedapaperofwhitepaperonhisforehead.( 白)黑)八、、)黑)八、、)Eispastedapaperofwhitepaperonhisforehead.( 白)9.誠實族和說謊族是來自兩個荒島的不同民族,誠實族的人永遠說真話,而說謊族的人永遠說假話。迷語博士是個聰明的人,他要來判斷所遇到的人是來自哪個民族的。迷語博士遇到三個人,知道他們可能是來自誠實族或說謊族的。為了調查這三個人是什么族的,博士分別問了他們的問題,這是他們的對話:問第一個人:“你們是什么族?”,答:“我們之中有兩個來自誠實族。”第二個人說:“不要胡說,我們三個人中只有一個是誠實族的?!钡谌齻€人聽了第二個人的話后說:“對,就是只有一個誠實族的?!闭埜鶕?jù)他的回答判斷他們分別是哪個族的。*問題分析與算法設計假設這三個人分別為 A、BC,若說謊其值為0,若誠實,其值為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利用窮舉法,可以很容易地推出結果。*程序說明與注釋#include<>intmain(){inta,b,c;for(a=0;a<=1;a++)/* 窮舉每個人是說謊還是誠實的全部情況 */for(b=0;b<=1;b++)/* 說謊:0誠實: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("Aisa%s.\n",a?"honest":"lier");/*輸出判斷結果*/printf("Bisa%s.\n",b?"honest":"lier");printf("Cisa%s.\n",c?"honest":"lier");}}*運行結果Aisalier(說謊族)Bisalier(說謊族)Cisalier(說謊族)10.角谷猜想日本一位中學生發(fā)現(xiàn)一個奇妙的“定理”,請角谷教授證明,而教授無能為力,于是產生角谷猜想。猜想的內容是:任給一個自然數(shù),若為偶數(shù)除以 2,若為奇數(shù)則乘3加1,得到一個新的自然數(shù)后按照上面的法則繼續(xù)演算,若干次后得到的結果必然為 1。請編程驗證。*問題分析與算法設計本題是一個沿未獲得一般證明的猜想,但屢試不爽,可以用程序驗證。題目中給出的處理過程很清楚,算法不需特殊設計,可按照題目的敘述直接進行證。*程序說明與注釋#include<>intmain(){intn,count=0;printf("Pleaseenternumber:");scanf("%d",&n);/* 輸入任一整數(shù)*/do{if(n%2)n=n*3+1;/*若為奇數(shù),n乘3加1*/

溫馨提示

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

評論

0/150

提交評論