算24點的演算法,個人覺得比網上那些要完善

2021-04-12 13:53:45 字數 1622 閱讀 9255

先說說我的思路,以四個整數計算24為例,這4個數存放在arr中,分別為arr[0]~arr[3]:

首先是4個數的順序組合,應該是有以下24種:

arr[0],arr[1],arr[2],arr[3]

arr[0],arr[1],arr[3],arr[2]

arr[0],arr[3],arr[2],arr[1]

arr[0],arr[3],arr[1],arr[2]

arr[0],arr[2],arr[3],arr[1]

arr[0],arr[2],arr[1],arr[3]

arr[1],arr[0],arr[2],arr[3]

arr[1],arr[0],arr[3],arr[2]

arr[1],arr[3],arr[2],arr[0]

arr[1],arr[3],arr[0],arr[2]

arr[1],arr[2],arr[3],arr[0]

arr[1],arr[2],arr[0],arr[3]

arr[2],arr[1],arr[0],arr[3]

arr[2],arr[1],arr[3],arr[0]

arr[2],arr[3],arr[0],arr[1]

arr[2],arr[3],arr[1],arr[0]

arr[2],arr[0],arr[3],arr[1]

arr[2],arr[0],arr[1],arr[3]

arr[3],arr[1],arr[2],arr[0]

arr[3],arr[1],arr[0],arr[2]

arr[3],arr[0],arr[2],arr[1]

arr[3],arr[0],arr[1],arr[2]

arr[3],arr[2],arr[0],arr[1]

arr[3],arr[2],arr[1],arr[0]

然後針對上面的每一種組合,比如:arr[0],arr[1],arr[2],arr[3]

1)計算arr[0]和arr[1]的6種運算結果k1:a+b,a-b,a*b,a/b,    b-a, b/a

2)計算k1和arr[2]的6種運算結果k2

3)計算k2和arr[3]的6種運算結果k3

如果(k3*10)取整=240 (乘10是為了防止24.01和23.99的情況)

就是正確結果,並輸出

不過本程式也還有一些缺點:

1、每一步都加上的括號,可能結果看起來不太好看,呵呵

2、重複結果太多,比如 8,3,1,1的部分結果:

(((1*3)*8)*1) = 24

(((1*3)*1)*8) = 24

(((1*3)*8)/1) = 24

(((1*8)*3)*1) = 24

(((1*8)*3)/1) = 24

(((1*3)/1)*8) = 24

大家可以看到,尤其是第一行和第二行,實際是一樣的,程式中該如何處理,我還在思考中,大家有什麼意見提提?

3、程式還可以優化,比如1,2,2,3

1和2組合的最大值是1+2=3

此時後兩個數的最大組合是2*3=6

那麼3和6的最大組合是:3*6=18,不可能=24,所以1和2組合的情況就不應該遍歷下去了,以節省時間,

程式中沒有實現這一點

python 的算24點程式

rel original file href 文件 201 rel file list href 文件 201.files filelist.xml 今天在網上同學求教 1 5 6 7 用 算出21.自己曾經寫過一個 但 找不到了 偶知道 24點的程式很多的說 於是到網上搜了一下 是有不少 但是一個...

24點遊戲的演算法

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

一個樸素的24點演算法

include include include include define oper add 0x00000001 define oper sub 0x00000002 define oper mul 0x00000004 define oper div 0x00000008 define opt...

點24個,面12個的理解

一個三角面網格模型,三角面可以理解為網格模型的構成元素,比如使用建構函式boxgeometry和mesh建立一個立方體網格模型,實際上它是由至少12個三角面組成 立方體6個面,每個面是2個三角面。使用建構函式three.face3 把任意三個頂點的索引 三個頂點的共用法向量作為引數可以建立一個三角面...

003 閒下來,寫個算24點的工具吧

昨天在群裡看到了一個分享的小遊戲 王者算24點 然後開心地分享了自己340秒算10個的戰績 結果被小青瞬間ko。她用202秒就結束了 既然作為程式設計師,那就用程式設計師的方式來繼續戰鬥吧 說到24點,無非就是4個數字之間的組合,也不知道是怎麼寫的,反正我最後算出來是有3888種組合方式,只要算完這...