24點遊戲演算法

2021-06-18 08:07:57 字數 1265 閱讀 3687

24點遊戲演算法

現在我們在做乙個

24點的小遊戲,我主要負責演算法部分,前面有章部落格已經講解了加括號的四則表示式的計算演算法,現在要解決就是24點的演算法。

54張牌去掉大小王

2張牌,剩餘

52張。

任意發1-

k之間的4個

張牌(也就是有

1-13

的四個數字

),用+-*/()鏈結成算式,使得式子的計算結果為24.

24點的演算法還處比較複雜的,網上有各種別人寫的現成**,大部分都寫的不太好。

主要的思想是

窮舉法,列舉出所有

4個數字+3個運算子+括號的組合;在計算的過程利用剪枝把一些不可能的情況去除掉。

網上有很多演算法,主要來講一下,像以下有幾個比較一下。 如:

這種方式沒有考慮加括號的情況,不能很好地解決問題

再有:還是沒有完整地解決問題,這裡只對前兩個數及後兩個數進行了加括號,即先計算兩個數,再計算後兩個數,最後把兩個結果進行計算

。沒有計算的順序和加括號。

後然還是找到一種比較好的解決方案,基本上可以解決的問題。這演算法邏輯比較複雜,但是基本都看懂了,既然已經別人都已經寫好了,我就不再花時間了,直接貼**嗎。

/**

* 他的主要想法是

* 先對四個數中的任意兩個數進行四則運算,得到的結果加剩餘的兩個數還有三個數

* 再對三個數中的任意兩個數進行四則運算,得到的結果加剩餘的乙個數還有二個數

* 再對剩餘的兩個數進行四則運算,得到的結果如果是24,就說明該表示式能得到24,表示式正確;

* 如果結果不是24,則說明表示式不正確

* @param n

* @return

*/public boolean is24(int n)

if (a != 0)

//如果以上的加、減、乘、除都不能得到有效的結果,則恢復資料進行下一輪的計算。

number[i] = a; // 恢復

number[j] = b;

exp[i] = expa;

exp[j] = expb;}}

return false;

}

迴圈的過程如下

24點遊戲演算法

24點遊戲演算法 現在我們在做乙個 24點的小遊戲,我主要負責演算法部分,前面有章部落格已經講解了加括號的四則表示式的計算演算法,現在要解決就是24點的演算法。54張牌去掉大小王 2張牌,剩餘 52張。任意發1 k之間的4個 張牌 也就是有 1 13 的四個數字 用 鏈結成算式,使得式子的計算結果為...

24點遊戲的演算法

給定4個數字計算24 public class core string output s.getexpression for int i 0 i output.length i 設定被計算的四個數,由於是陣列,所以具有容錯功能 不為4個數 public void setnumbers double ...

24點小遊戲演算法

要求 1 9任意四個數字,利用加減乘除括號五種運算使最終結果等於24 如果能達到要求,列印所有方法 同樣的加減乘除,括號不同位置算兩種不同的方法 若不能達到要求,列印 不能計算達到24 思考過程 四個數字,三步運算,二個括號,而這兩個括號的位置有五種不同的情況。也就是說,不論運算符號是什麼,利用括號...