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 思考過程 四個數字,三步運算,二個括號,而這兩個括號的位置有五種不同的情況。也就是說,不論運算符號是什麼,利用括號...