●題目名稱
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 的四個數字 用 鏈結成算式,使得式子的計算結果為...