經典二十四點程式演算法
#include
"stdio.h"
// 輸入輸出定義
double
cal(
double a,
double b,
int op)
// op: 0:+,1:-,2:*,3:/
if(b==
0.0)
// 分母為0
return
(999.0);
else
return
(a/b);}
bool
isequal
(double d1,
double d2)
// 兩個浮點數是否近似相等
void
d24(
int v0,
int v1,
int v2,
int v3)
// 窮舉法求24點
;// +:0 -:1 *:2 /:3
int v[4]
;// 輸入四整數
v[0]
=v0; v[1]
=v1;
v[2]
=v2; v[3]
=v3;
//-----------四重迴圈開始窮舉四個數字的位置: 4!=24 種--------------------------
int count=0;
// 計數成功次數
for(
int i1=
0;i1<
4;i1++
)for
(int i2=
0;i2<
4;i2++
)// 四重迴圈對四個數窮舉
if(i2!=i1)
for(
int i3=
0;i3<
4;i3++)if
(i3!=i2 && i3!=i1)
for(
int i4=
0;i4<
4;i4++)if
(i4!=i3 && i4!=i2 && i4!=i1)
// 第2種情況(a 。b)。(c。 d) 開始計算 :
t1=cal(v[i1]
,v[i2]
,f1)
; t2=
cal(v[i3]
,v[i4]
,f3)
; t3=
cal(t1,t2,f2);if
(isequal
(t3,24)
)// 運算後是否為24
// 第3種情況 (a。(b。c))。d 開始計算 :
t1=cal(v[i2]
,v[i3]
,f2)
; t2=
cal(v[i1]
,t1,f1)
; t3=
cal(t2,v[i4]
,f3);if
(isequal
(t3,24)
)// 運算後是否為24
// 第4種情況 a。((b。c)。d ) 開始計算:
t1=cal(v[i2]
,v[i3]
,f2)
; t2=
cal(t1,v[i4]
,f3)
; t3=
cal(v[i1]
,t2,f1);if
(isequal
(t3,24)
)// 運算後是否為24
// 第5種情況 a。(b。(c。d)) 開始計算:
t1=cal(v[i3]
,v[i4]
,f3)
; t2=
cal(v[i2]
,t1,f2)
; t3=
cal(v[i1]
,t2,f1);if
(isequal
(t3,24)
)// 運算後是否為24}}
//-------------- 窮舉結束: 共 24*64*5=7680 種表示式 ---------------------------
if(count==0)
printf
("\\n%d,%d,%d,%d 不能算出24."
,v0,v1,v2,v3)
;else
printf
("\\n共找到算式 %d 條."
,count);}
void
main()
C Builder構建算二十四點小遊戲
所謂算二十四點可能是不少讀者朋友童年喜歡玩的撲克遊戲之一,玩法是 把一副撲克牌從a到10選出來均分成兩份,兩個小朋友各持乙份即可開始遊戲,每人隨機抽兩張出來組成四張牌,把這四張牌加減乘除湊成結果為二十四,先算出來的一方贏得對方的兩張牌,進行下一輪,如果都沒計算出來為和局,直到把對方所有的撲克牌全部繳...
C Builder構建算二十四點小遊戲
所謂算二十四點可能是不少讀者朋友童年喜歡玩的撲克遊戲之一,玩法是 把一副撲克牌從a到10選出來均分成兩份,兩個小朋友各持乙份即可開始遊戲,每人隨機抽兩張出來組成四張牌,把這四張牌加減乘除湊成結果為二十四,先算出來的一方贏得對方的兩張牌,進行下一輪,如果都沒計算出來為和局,直到把對方所有的撲克牌全部繳...
C Builder構建算二十四點小遊戲
所謂算二十四點可能是不少讀者朋友童年喜歡玩的撲克遊戲之一,玩法是 把一副撲克牌從a到10選出來均分成兩份,兩個小朋友各持乙份即可開始遊戲,每人隨機抽兩張出來組成四張牌,把這四張牌加減乘除湊成結果為二十四,先算出來的一方贏得對方的兩張牌,進行下一輪,如果都沒計算出來為和局,直到把對方所有的撲克牌全部繳...