24點遊戲簡單版

2021-09-17 21:08:46 字數 2567 閱讀 2229

●題目名稱

24點遊戲(經典的紙牌益智遊戲)

●題目分析

隨機生成4個代表撲克牌牌面的數字字母,程式自動列出所有可能算出24的表示式,可以利用窮舉法列出4個數字加減乘除的各種可能性,包括括號的演算法,並且要利用迴圈控制計算範圍,防止出現重複的表示式。

●演算法構造

<1>利用隨機函式生成4個隨機數

<2>將4個數所有可能的順序列舉,並呼叫計算函式

<3>迴圈呼叫使4個數字分別進行兩兩運算,並將表示式儲存在乙個陣列中

<4>將3個運算子的順序進行調整,呼叫加減乘除運算操作函式計算並輸出

●演算法實現

#include#include#include#define n 10    //定義四個數的取值最大為10

double operate(double a,double b,char ch) //加減乘除運算操作函式

int precede(char a,char b) //判斷優先順序函式

if(a=='*'||a=='/')

return 0;

return 0;

} int check(double a,double b,double c,double d)

; //陣列儲存運算子

double a[n],b[n][n],c[n][n][n];

for(i=0;i<4;i++) //迴圈呼叫使a,b進行運算操作,d為運算子,運算結果存到a中

a[i]=operate(a,b,d[i]);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

b[i][j]=operate(a[i],c,d[j]); //a,b運算的結果和c運算,結果存到b中

for(i=0;i<4;i++)

for(j=0;j<4;j++)

for(k=0;k<4;k++) //迴圈防止重複

c[i][j][k]=operate(b[i][j],d,d[k]); //a,b,c運算的結果和d運算,結果存到c中

for(i=0;i<4;i++)

for(j=0;j<4;j++)

for(k=0;k<4;k++)

return 0;

} void show(double a,double b,double c,double d) //輸出函式,運算過程與check()函式相同

; double a[n],b[n][n],c[n][n][n];

for(i=0;i<4;i++)

a[i]=operate(a,b,d[i]);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

b[i][j]=operate(a[i],c,d[j]);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

for(k=0;k<4;k++) //防止重複

c[i][j][k]=operate(b[i][j],d,d[k]);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

for(k=0;k<4;k++)

else if(precede(d[j],d[k])) //呼叫判斷優先順序函式,判斷第

二、第三個運算子可能出現的情況

else //呼叫判斷優先順序函式,判斷第

一、第三個運算子可能出現的情況

} }

} void game_24()

; srand((unsigned)time(null));

while(1)

if((check(a,b,c,d)||check(b,c,a,d))||(check(c,b,d,a)||check(d,a,b,c)))

break;

else

} printf("隨機生成四個數為:");

printf("%.0f %.0f %.0f %.0f\n",a,b,c,d);

printf("是否要看答案(y/n):");

while(1)

else

printf("是否要看答案(y/n):");

} } void menu()

} } void main()

●經驗歸納

●●遇到的問題

<1>在防止重複問題上有點迷茫,已解決

<2>對資料結構棧不夠清楚,未寫提高要求

●●心得體會

感覺自己對資料結構棧的知識點很薄弱,需要加強。而且在解決基本要求時考慮的不夠全面,剛開始沒有考慮到防止重複的問題,還有出現過進入無限迴圈的問題,好在均已解決,但是隨機函式生成4個數字的時候,4個數字可能會出現重複的情況,我在網上找了一下,有不重複的隨機函式**,在這裡不贅述了。

個人認為這個**還可以優化~~~

C 實現簡單24點遊戲

隨機生成4個代表撲克牌牌面的數字字母,程式自動列出所有可能算出24的表示式,用擅長的語言 c c j a或其他均可 實現程式解決問題。程式風格良好 使用自定義注釋模板 列出表示式無重複。以下為源 include include include include using namespace std ...

經典遊戲,計算24點,簡單實現

問題 一副撲克牌,每張牌表示 1,13 之間的乙個整數,任意抽4張,用 運算,使得結果等於24。分析 4個數,4種運算,選擇乙個計算順序,選擇3個運算子,最多不過4k種組合,剪枝都省了,純暴力搜尋。記4個數為a,b,c,d,運算子為op1,op2,op3,那麼所有的計算組合,都可以表示 為以下兩種之...

24點遊戲演算法

24點遊戲演算法 現在我們在做乙個 24點的小遊戲,我主要負責演算法部分,前面有章部落格已經講解了加括號的四則表示式的計算演算法,現在要解決就是24點的演算法。54張牌去掉大小王 2張牌,剩餘 52張。任意發1 k之間的4個 張牌 也就是有 1 13 的四個數字 用 鏈結成算式,使得式子的計算結果為...