算24點程序

算法的思想參考csdn 算法論壇前版主海星。不過原帖我找不到了,以下是另一個人轉載他的鏈接:http://blog.csdn.net/mingWar/archive/2008/11/29/3410735.aspx

 

基本原理是窮舉4個整數所有可能的表達式,然後對表達式求值。

表達式的定義: expression = (expression|number) operator (expression|number)

因爲能使用的4種運算符 + - * / 都是2元運算符,所以本文中只考慮2元運算符。2元運算符接收兩個參數,輸出計算結果,輸出的結果參與後續的計算。

由上所述,構造所有可能的表達式的算法如下:

(1) 將4個整數放入數組中
(2) 在數組中取兩個數字的排列,共有 P(4,2) 種排列。對每一個排列,
   (2.1) 對 + - * / 每一個運算符,
  (2.1.1) 根據此排列的兩個數字和運算符,計算結果
  (2.1.2) 改表數組:將此排列的兩個數字從數組中去除掉,將 2.1.1 計算的結果放入數組中
  (2.1.3) 對新的數組,重複步驟 2
  (2.1.4) 恢復數組:將此排列的兩個數字加入數組中,將 2.1.1 計算的結果從數組中去除掉

 可見這是一個遞歸過程。步驟 2 就是遞歸函數。當數組中只剩下一個數字的時候,這就是表達式的最終結果,此時遞歸結束。

於是按照這個思想,寫了一個程序,搜索出所有可行的方法,【程序基本上屬於拷貝性質】:

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章