24點問題(窮舉法 C )

2021-07-04 05:21:44 字數 1877 閱讀 1290



算24點(point24)

【問題描述】

幾十年前全世界就流行一種數字遊戲,至今仍有人樂此不疲.在中國我們把這種遊戲稱為「算24點」。您作為遊戲者將得到4個1~9之間的自然數作為運算元,而您的任務是對這4個運算元進行適當的算術運算,要求運算結果等於24。

您可以使用的運算只有:+,-,*,/,您還可以使用()來改變運算順序。注意:所有的中間結果須是整數,所以一些除法運算是不允許的(例如,(2*2)/4是合法的,2*(2/4)是不合法的)。下面我們給出乙個遊戲的具體例子:

若給出的4個運算元是:1、2、3、7,則一種可能的解答是1+2+3*7=24。

【輸入】

只有一行,四個1到9之間的自然數。

【輸出】

如果有解的話,只要輸出乙個解,輸出的是三行資料,分別表示運算的步驟。其中第一行是輸入的兩個數和乙個運算子和運算後的結果,第二行是第一行的結果和乙個輸入的資料、運算子、運算後的結果;第三行是第二行的結果和輸入的乙個數、運算子和「=24」。如果兩個運算元有大小的話則先輸出大的。

如果沒有解則輸出「no answer!」

【樣例】

point24.in  

1 2 3 7

point24.out    

2+1=3

7*3=21

21+3=24

總可能情況很少,只有4個數字和4種符號(括號),直接採用窮舉法,但要稍微處理下疊加括號問題。

但是這裡發現只有括號內有加減法運算,括號外有乘除法運算時,該括號才有意義,因此分析後發現只有4個數字時,疊加括號是沒有意義的(這裡說的不太清楚,自己稍微推一下就知道了)。**如下

#include #include #include #include using namespace std;

int a1[5],b1[4];

void gol(char f,int k,int num)

int cal(int a,int b,int num)

string cha(int a)

return p;

}string chaf(int a)

int main()

*/ //cout << endl;

memset(f,0,sizeof(f));

s=0;

for(i=1;i<=3;i++)

}} while(f[0]==0)

cout << endl;

for(i=1;i<=4;i++) a1[i]=a[i];

for(i=1;i<=3;i++) b1[i]=b[i];

anum=4;bnum=3;

for(i=1;i<=4;i++) ans[i]="";

ansnum=0;

j=1;

while(j<=bnum)

j++;

}j=1;

//cout << anum << " " << bnum << endl;

while(j<=bnum)

j++;

}//cout << anum << " " << bnum << endl;

j=1;

while(j<=bnum)

//cout << anum << " " << bnum << endl;

//cout << a1[1] << endl;

if (a1[1]==24)

return 0;

}j=s;

while(f[j]==1)

f[j]=1;

} //cout << "---------------\n";

i=3;

while(b[i]==3)

b[i]++;

}}

24點遊戲(窮舉法)

三 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 兩個浮點數是否近似...

窮舉法求解24點

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

窮舉法解24點遊戲

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