五猴分桃c语言课程设计,c语言程序设计五猴分桃问题实验报告.doc
c語言程序設計五猴分桃問題實驗報告.doc
課程設計報告學院、系:吉林大學珠海學院計算機科學與技術系專業名稱:軟件工程課程設計科目C語言程序課程設計所在班級:10班學生學號:04121010學生姓名:趙學文指導教師:郭曉燕完成時間:2013年3月-5月五猴分桃問題一、設計任務與目標關于五猴分桃問題,已經有很多人思考和嘗試建立了一些程序解決。五猴分桃,五只猴子合作摘了很多桃子,感到累了,決定先去睡覺,醒后再分。不知過了多久,第一只猴子醒了,看見其它猴子都沒有醒,就把所有桃子分為五堆,發現多一個,就吃了一個,拿走一堆,把剩下的又堆在一起走了。第2只猴子醒來,以為自己是第一個,也是把桃子分為五堆,也是多一個,就吃了一個,拿走一堆,剩下的又堆在一起走了。第3,4,5只猴子都是這樣歸根究底是一個數學上的問題,但在程序員眼中,解決一個問題,不僅要得出答案,還要以最簡便的方法,在最短的時間內得出答案。所以,即使這是一個耳熟能詳的問題,不同程序員眼里,也有不同的方法。在復雜之中提取捷徑便是我的目的,完成這個設計,能提高自我能動性,并聯系數學實際。我希望通過這次設計,增強自我獨立能力,并進一步激發我對編程這一方面的興趣。二、方案設計與論證對于這一個問題,難就難在每次分時都多出1個桃子。這又關系到數學問題,每次少1個,數據不確定,如果從大方面去考慮的話,計算過程確實比較復雜。既然如此,何不從另一個角度入手?我們沒必要先去猜這堆桃子到底總共有多少個,大概范圍為多少。實際上可以理解桃子里少了4個;于是,我們可借給它們4個再分。為什么?因為盡管多了四個,但每個猴子分得的桃子不會多,也不會少,且每次都可以被5整除。怎樣借?方法其實很簡單,就是數學的假設問題。我們不妨先設借到4個桃子后的總數為X,原來桃子的總數為Y。則有Y=X-4。第一只猴子分完后的總數為:A=X/5*4;第二只猴子分完后的總數為:B=A/5*4=X/25*16;第三只猴子分完后的總數為:C=B/5*4=X/125*64;第四只猴子分完后的總數為:D=C/5*4=X/625*256;第五只猴子分完后的總數為:E=D/5*4=X/3125*1024;事實上每次分前,猴子的數量都不變。分后,桃子的堆數也不變。于是,各猴子分桃便有上式這樣的一種關系。通過分析,很明顯,借到4個桃子后,每次分完時總數都是整數。X從第五只猴子分完后至少能被3125整除,所以X至少為3125。猴子至少摘了桃子Y=3125-4=3121;第一只猴子至少分得:3125/5=625;第二只猴子至少分得:2500/5=500;第三只猴子至少分得:2000/5=400;第四只猴子至少分得:1600/5=320;第五只猴子至少分得:1280/5=256;所以最后還剩桃子為1280-256-4=1020個桃子。整個過程看似繁瑣復雜,但事實上在添加法后,程序變得更加簡明易懂。三、程序框圖或流程圖,程序清單與調用關系圖1Main函數:程序的主函數定義整型變量i,x,y,num1,num2,num3,num4,num5,zi代表程序循環的次數x代表加上5個桃子后摘下桃子的總數y代表摘下桃子的總數num1,num2,num3,num4,num5分別代表連續五個猴子分到的桃子數z代表最后一只猴子拿走桃子后剩下的數量四、全部源程序清單#includevoidmain()/*主函數*/{inti,x,y;intnum1,num2,num3,num4,num5,z;for(i=1;ivoidjisuan(floata,floatb,floatc,floatd)//進行運算符和括號的排列及計算{if(a+b+c+d==24){printf(“%1.0f+%1.0f+%1.0f+%1.0f=24\n“,a,b,c,d);}if(a+b+c-d==24){printf(“%1.0f+%1.0f+%1.0f-%1.0f=24\n“,a,b,c,d);}if(a+b+c*d==24){printf(“%1.0f+%1.0f+%1.0f*%1.0f=24\n“,a,b,c,d);}if(a+(b+c)*d==24){printf(“%1.0f+(%1.0f+%1.0f)*%1.0f=24\n“,a,b,c,d);}if((a+b+c)*d==24){printf(“(%1.0f+%1.0f+%1.0f)*%1.0f=24\n“,a,b,c,d);}if(a+b+c/d==24){printf(“%1.0f+%1.0f+%1.0f/%1.0f=24\n“,a,b,c,d);}if(a+(b+c)/d==24){printf(“%1.0f+(%1.0f+%1.0f)/%1.0f=24\n“,a,b,c,d);}if((a+b+c)/d==24){printf(“(%1.0f+%1.0f+%1.0f)/%1.0f=24\n“,a,b,c,d);}if(a+b-c+d==24){printf(“%1.0f+%1.0f-%1.0f+%1.0f=24\n“,a,b,c,d);}if(a+b-c-d==24){printf(“%1.0f+%1.0f-%1.0f-%1.0f=24\n“,a,b,c,d);}if(a+b-c*d==24){printf(“%1.0f+%1.0f-%1.0f*%1.0f=24\n“,a,b,c,d);}if(a+(b-c)*d==24){printf(“%1.0f+(%1.0f-%1.0f)*%1.0f=24\n“,a,b,c,d);}if((a+b-c)*d==24){printf(“(%1.0f+%1.0f-%1.0f)*%1.0f=24\n“,a,b,c,d);}if(a+b-c/d==24){printf(“%1.0f+%1.0f-%1.0f/%1.0f=24\n“,a,b,c,d);}if(a+(b-c)/d==24){printf(“%1.0f+(%1.0f-%1.0f)/%1.0f=24\n“,a,b,c,d);}if((a+b-c)/d==24){printf(“(%1.0f+%1.0f-%1.0f)/%1.0f=24\n“,a,b,c,d);}if(a+b*c+d==24){printf(“%1.0f+%1.0f*%1.0f+%1.0f=24\n“,a,b,c,d);}if((a+b)*c+d==24){printf(“(%1.0f+%1.0f)*%1.0f+%1.0f=24\n“,a,b,c,d);}if(a+b*(c+d)==24){printf(“%1.0f+%1.0f*(%1.0f+%1.0f)=24\n“,a,b,c,d);}if((a+b)*(c+d)==24){printf(“(%1.0f+%1.0f)*(%1.0f+%1.0f)=24\n“,a,b,c,d);}if(a+b*c-d==24){printf(“%1.0f+%1.0f*%1.0f-%1.0f=24\n“,a,b,c,d);}if((a+b)*c-d==24){printf(“(%1.0f+%1.0f)*%1.0f-%1.0f=24\n“,a,b,c,d);}if(a+b*(c-d)==24){printf(“%1.
總結
以上是生活随笔為你收集整理的五猴分桃c语言课程设计,c语言程序设计五猴分桃问题实验报告.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言诡异程序,为什么C语言诡异离奇、缺
- 下一篇: c语言100以内奇数的和为多少,编写C#