C++24點(diǎn)撲克牌游戲(含源碼)_第1頁
C++24點(diǎn)撲克牌游戲(含源碼)_第2頁
C++24點(diǎn)撲克牌游戲(含源碼)_第3頁
C++24點(diǎn)撲克牌游戲(含源碼)_第4頁
C++24點(diǎn)撲克牌游戲(含源碼)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、一、實(shí)驗(yàn)設(shè)計(jì)方案1、實(shí)驗(yàn)內(nèi)容與目的(簡單介紹實(shí)驗(yàn)內(nèi)容,說明實(shí)驗(yàn)?zāi)康模?shí)驗(yàn)?zāi)康模簩?shí)現(xiàn)撲克牌游戲:對于任意的四個1到13的整數(shù)(四張撲克牌),求能算出24的表達(dá)式;運(yùn)算符有()+-*/;若無解則輸出相應(yīng)的信息。實(shí)驗(yàn)內(nèi)容:你的具體選擇(要詳細(xì))文件輸入(input.txt)輸出(output.txt),輸出全部結(jié)果;2、實(shí)驗(yàn)準(zhǔn)備工作(闡述解決問題所涉及的算法思想,至少要畫一個算法流程圖來說明)本次實(shí)驗(yàn)相當(dāng)于,給出四個數(shù)字,要求,在其間添加運(yùn)算符和括號,使得計(jì)算結(jié)果等于24。括號的放置即為決定哪幾個數(shù)先進(jìn)行計(jì)算。所以,我們先確定首先進(jìn)行計(jì)算的兩個相鄰的數(shù),計(jì)算完成后,就相當(dāng)于剩下三個數(shù)字,仍需要在它們

2、之間添加符號;然后再決定在這三個數(shù)中哪兩個相鄰的數(shù)先計(jì)算。由此,我們就成功解決了數(shù)字的運(yùn)算次序問題,此時不需要再考慮不同運(yùn)算符號的優(yōu)先級問題,因?yàn)槔ㄌ柕膬?yōu)先級高于加減乘除。通過循環(huán),我們可以得到第一第二第三次計(jì)算的運(yùn)算符,再通過計(jì)算,就可以得出和,若和等于24,即為所求解。在輸出格式中,由于括號的放置共六種情況,故根據(jù)計(jì)算先后順序的不同,輸出時在不同地方放置括號;以下為循環(huán)計(jì)算的流程圖:先算個擇計(jì)兩澈選行的郴先算個擇計(jì)兩澈選行的郴第一個數(shù)字第一個數(shù)字第二個數(shù)字AVr*第三個數(shù)字第四個數(shù)字第一個數(shù)字第二個數(shù)字AVr*第三個數(shù)字第三個符號表示循環(huán)獲??;II表示十算數(shù)值以下為計(jì)算函數(shù)的流程圖:二、實(shí)

3、驗(yàn)步驟、測試與結(jié)果分析1、源程序的設(shè)計(jì)(在此附上源程序(cpp文件)清單)#include#include#includeusingnamespacestd;charsign4=+,-,*,/;/定義一個全局變量,用于儲存加減乘除符號,方便下面符號判斷classgame24point/24點(diǎn)紙牌游戲類private:doublea4;/為實(shí)現(xiàn)精確計(jì)算,防止計(jì)算結(jié)果為小數(shù)卻被強(qiáng)制轉(zhuǎn)換為整數(shù),采用double變量public:game24point();/構(gòu)造函數(shù)doublecalcute(double,double,char);/計(jì)算函數(shù),給出一個符號兩個有順序的數(shù),計(jì)算結(jié)果voidsearch

4、();/搜索函數(shù),用于尋找合適的解voidprint();/打印得到的四張紙牌的數(shù)值;game24point:game24point()charch4;/由于紙牌中除了數(shù)字還有AJQK等字符,故使用字符數(shù)組ifstreaminfile(input.txt);if(!infile)/若打開失敗cout打開文件input.txt失??!endl;exit(1);for(inti=0;ichi;/在input文件中讀取數(shù)據(jù)cout#endl;cout#cout#cout#正在從input.txt中讀取數(shù)據(jù)#endl;#endl;#endl;cout#endl;for(i=0;i4;i+)if(chi=

5、A)ai=10;elseif(chi=J)ai=11;elseif(chi=Q)ai=12;elseif(chi=K)ai=13;elseif(chi=1)ai=1;elseif(chi=2)ai=2;elseif(chi=3)ai=3;elseif(chi=4)ai=4;elseif(chi=5)ai=5;elseif(chi=6)ai=6;elseif(chi=7)ai=7;elseif(chi=8)ai=8;elseif(chi=9)ai=9;elsecout第i+l個數(shù)據(jù)輸入有誤!endl;exit(1);/紙牌字符轉(zhuǎn)換為數(shù)值infile.close();doublegame24poi

6、nt:calcute(doublea,doubleb,charindex)if(index=+)returna+b;/若為+,則返回相應(yīng)結(jié)果elseif(index=-)returna-b;elseif(index=*)returna*b;elseif(index=/)if(b!=0)returna/b;/只有當(dāng)分母不為0時,返回結(jié)果voidgame24point:search()doubletemp3,tem2;/第一個符號放置后,經(jīng)過計(jì)算后相當(dāng)于剩下三個數(shù),這個數(shù)組用于存儲這三個數(shù)doublesum;/求得的和intjudge=0;/判斷是否找到一個合理的解ofstreamoutfile(

7、output.txt,ios:app);/以輸出的方式打開文件if(!outfile)/若文件打開失敗cout打開文件output.txt失敗endl;exit(1);cout#endl;cout#endl;cout#正在計(jì)算結(jié)果,請等待#endl;cout#endl;cout#endl;outfile=endl;outfile#endl;outfile#endl;outfile#本次24點(diǎn)游戲求得結(jié)果如下#endl;outfile#endl;outfile#endl;for(inti=0;i4;i+)/第一次放置的符號for(intj=0;j4;j+)/第二次放置的符號for(intk=0;

8、k4;k+)/第三次放置的符號for(intm=0;m3;m+)/首先計(jì)算的兩個相鄰數(shù)字,共有3種情況,相當(dāng)于括號的作用if(am+1=0&signi=/)break;tempm=calcute(am,am+1,signi);temp(m+1)%3=a(m+2)%4;temp(m+2)%3=a(m+3)%4;/先確定首先計(jì)算的兩個數(shù)字,計(jì)算完成相當(dāng)于剩下三個數(shù),按順序儲存在temp數(shù)組中for(intn=0;n2;n+)/三個數(shù)字選出先計(jì)算的兩個相鄰數(shù)字,兩種情況,相當(dāng)于第二個括號if(tempn+1=0&signj=/)break;temn=calcute(tempn,tempn+1,sig

9、nj);tem(n+1)%2=temp(n+2)%3;/先確定首先計(jì)算的兩個數(shù)字,計(jì)算完成相當(dāng)于剩下兩個數(shù),按順序儲存在temp數(shù)組中if(tem1=0&signk=/)break;sum=calcute(tem0,tem1,signk);/計(jì)算和if(sum=24)/若和為24judge=1;/判斷符為1,表示已求得解if(m=0&n=0)outfile(a0signia1)signja2)signka3=sumendl;elseif(m=0&n=1)outfile(a0signia1)signk(a2signja3)=sumendl;elseif(m=1&n=0)outfile(a0sig

10、nj(a1signia2)signka3=sumendl;elseif(m=1&n=1)outfilea0signk(a1signia2)signja3)=sumendl;elseif(m=2&n=0)outfile(a0signja1)signk(a2signia3)=sumendl;elseif(m=2&n=0)outfilea0signk(a1signj(a2signia3)=sumendl;/m=0,l,2n=0,1表示六種括號放置可能,并按照這六種可能輸出相應(yīng)的格式的計(jì)算式if(judge=O)outfile這四張撲克牌無法找到一個合理的解endl;/如果沒有找到結(jié)果,符號位為0ou

11、tfile=endl;outfileendlendl;outfile.close();cout計(jì)算完成,結(jié)果已保存在output.txt文件中!endl;voidgame24point:print()cout讀取成功!endl;for(inti=0;i4;i+)cout第i+l張牌aiendl;intmain(void)game24pointobj;obj.print();coutendl;obj.search();coutFilesCYuYaiibiiiwTtep.ezettnnttItit正在從input.txt中讀取數(shù)據(jù)#tt鞏壬壬W壬51234讀nnnn10878正在計(jì)算結(jié)杲,請等待林

12、卄tttt#正在計(jì)算結(jié)杲,請等待#Ittt#:十算完成,結(jié)果巨葆存在otU;卩皿上set文件申辛倩按任意犍繼續(xù)Output.txt輸出截圖如下:3、實(shí)驗(yàn)總結(jié)(是否成功解決問題,總結(jié)實(shí)驗(yàn)中最有價(jià)值的內(nèi)容,程序能夠在哪些方面進(jìn)一步改善,自我評價(jià)成敗得失)試驗(yàn)中,我們按照從簡單到復(fù)雜的方法,一步一個腳印編寫代碼,使得程序不易發(fā)生錯誤,并且容易更正,編寫出來的程序代碼簡潔明朗,效率較高;通過對例題的學(xué)習(xí),我們最終將正確的代碼編寫出,并在不斷地修改之下做到方便用戶使用的要求;編碼的速度有一個從慢到快的過程,在本次試驗(yàn)中,我們的速度依然比較慢,這看出我們平時編碼比較少,缺乏熟練度,并對算法了解不深入;但是

13、我們的代碼看起來仍然有些凌亂,效率還沒有帶到真正的高效,每次運(yùn)行都需要等待幾秒鐘。再以后我們將通過練習(xí)基礎(chǔ)功,簡化程序代碼,實(shí)現(xiàn)簡單代碼完善功能的理想。編碼要盡量使程序簡單,采用最切實(shí)可靠的算法,實(shí)現(xiàn)封裝,不同部分的代碼應(yīng)分工明確,最后由主函數(shù)統(tǒng)一調(diào)用;編寫完成后先自己檢查一遍代碼,然后由機(jī)器檢測,找出錯誤的根源,從不同角度思考如何解決問題;測試時應(yīng)盡可能輸入各種可能情況的數(shù)據(jù)以確保程序準(zhǔn)確無誤。應(yīng)避免任何可能的漏洞,使代碼的可用性和可靠性增強(qiáng)。試驗(yàn)中,我按照從簡單到復(fù)雜的方法,一步一個腳印編寫代碼,使得程序不易發(fā)生錯誤,并且容易更正,編寫出來的程序代碼簡潔明朗,效率較高;通過對例題的學(xué)習(xí),我最終將正確的代碼編寫出,并在不斷地修改之下做到方便用戶使用的要求;編碼的速度有一個從慢到快的過程,在本次試驗(yàn)中,我的速度依然比較慢,這看出我平時編碼比較少,缺乏熟練度,并對算法了解不深入;但是我的代碼看起來仍然有些凌亂,效率還沒有帶到真正的高效,每次運(yù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

提交評論