24點游戲:1-13中選4個,用各種方法計算得24。
熱心網友
答案很多啊。1*2*3*4,2*3*(5-1),應該任何四個數字都可以。
熱心網友
很簡單的 就拿 1 3 4 6 來說 6/(1-3/4)=24
熱心網友
算法說明首先解決圖形撲克牌的顯示問題。我選擇了Qcard。dll。運用其中的DrawCard過程可輕松實現撲克的顯示問題,在源程序中會有具體用法。接下來是24點算法的討論。首先想到的是用窮舉表達式的方法,然后求值。然而,由于括號的存在,使窮舉表達式并非易事。實際上,括號的作用僅僅是提高運算的優先級而已,如果我們規定符號的優先級,一樣可以達到要求。具體來說,設四張牌為a、b、c、d,運算符為①、②、③,表達式為a ① b ② c ③ 。如果強制規定①、②、③的優先順序,就不必考慮括號問題了。而這3個運算符的運算順序有3!=6種,分別是:1.①②③ 2。①③② 3。②①③ 4。②③① 5。③①② 6。③②①等價的表達式分別是:1。((a①b②)c③) 2。(a①b)②(c③d) 3。(a①(b②c))③d4。a①((b②c)③d) 5。(a①b)②(c③d) 6。 a①(b②(c③d))顯然,2和5是相同的,因此只考慮5種情況。這樣,括號的問題就解決了。接下來,就是生成a、b、c、d的全排列,注意去掉其中的相同排列。去除的方法很多,比如字典排序等,我用的是另一種方法。用循環的嵌套生成a、b、c、d的24種全排列,記錄在數組中。把每一組數當作一個四位的14進制數,把這24個數全部轉化為十進制(如(6529)14=6*143+5*142+2*14+9)。這樣,如果兩個排列完全相同,則得到的十進制數是相等的。這樣,通過對這些十進制的比較,就可以比較這些排列的相同情況。一旦遇到相同的排列,就標記上。最后生成一組沒有重復的排列。對這組排列進行以上方法的運算,就可以得到所有的結果了。注意在運算過程中除法的特殊性——除數不能為零。因為可能會用到除法,所以要考慮精度問題,這里通過結果減去24取絕對值與一個接近0的小數比較,如小于它,即可判定結果是24。附:其他待決的問題:1、圖形撲克牌的遮擋問題。當窗口中的撲克牌被遮擋后,撲克牌不會重新畫上,造成撲克牌遮擋后顯示不全問題。應尋找Qcard。dll的有關參數。2、形式不同而實質相同的解的問題。有些解雖然形式不同,但其實質是完全相同的。如3*((11+4)-7)和3*(11+(4-7)),實際上只是一種解。去掉這些相同解的問題情況較多,其較為繁瑣,有待解決。3、多余括號好問題。有些解的括號是多余的,應在輸出前去掉。4、改進程序的可玩性。增加玩家輸入表達式的功能,并判斷對錯,還可以加上時間限制,使玩家參與到游戲中。。
熱心網友
個人經驗:有一個竅門是比如有一張8,就用其他三張牌湊3;有一個6,就用其他牌湊4,如此類推.還有如果牌面較小,就考慮乘法,否則就考慮用加減.熟能生巧,玩的多了,反應就快了.