24點遊戲(窮舉法)

2021-09-17 07:47:08 字數 1779 閱讀 2108

三、**:

#include #include 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\n%d,%d,%d,%d 不能算出24.",v0,v1,v2,v3);

else

printf("\n\n共找到算式 %d 條.",count);

}int main()

**:

窮舉法解24點遊戲

24點遊戲 輸入 n1,n2,n3,n4 輸出 若能通過 和括號混合運算,得到運算結果為24,則輸出乙個對應的運算表示式 窮舉法 對4個數字全排列有4 24種排列。4個數字共需要3個運算子,同乙個運算子可以重複出現,則有4x4x4 64種情況。對於4個數字而言,共有以下5中加括號的方式 a b cd...

窮舉法求解24點

看到網上更多的是推薦使用遞迴,但是自己對遞迴一向有點頭疼,所有使用窮舉法求解。vs2005下測試通過。1 2使用窮舉法求解24點。3但是仍然有乙個問題 對於1 2與2 1,因為順序的關係,4系統仍然認為其是兩個解,此問題尚待解決。5author chris 6date 2013 06 18 7 8 ...

24點問題(窮舉法 C )

算24點 point24 問題描述 幾十年前全世界就流行一種數字遊戲,至今仍有人樂此不疲 在中國我們把這種遊戲稱為 算24點 您作為遊戲者將得到4個1 9之間的自然數作為運算元,而您的任務是對這4個運算元進行適當的算術運算,要求運算結果等於24。您可以使用的運算只有 您還可以使用 來改變運算順序。注...