常見程式設計問題之速算24點兩種解法

2021-09-27 02:58:58 字數 691 閱讀 2076

之前面試某大廠的時候碰到讓寫速算24點的程式,當時使用了保利排序,感覺寫的不是很好,這裡再總結一下。

一.速算24點遊戲描述:

「巧算24點」是一種數學遊戲,遊戲方式簡單易學,能健腦益智,是一項極為有益的活動.「巧算24點」的遊戲內容如下:一副牌中抽去大小王剩下52張,(如果初練也可只用1~10這40張牌)任意抽取4張牌(稱牌組),用加、減、乘、除(可加括號)把牌面上的數算成24.每張牌必須用一次且只能用一次,如抽出的牌是3、8、8、9,那麼算式為(9—8)×8×3或3×8+(9—8)或(9—8÷8)×3等.

二.思路分析

一般有兩種方法,

第一種暴力排列法:

先得到這4張牌的排序,時間複雜度為4!,然後對數字之間的3個空,分別插入4中運算子,這個時間複雜度為4^3,總共的時間複雜度為o(4!*4^3)

第二種方式遞迴加剪枝:

原來的問題表示為o(24,[a,b,c,d]),那麼原來的問題可以分解為o(24-a,[b,c,d]);o(24+a,[b,c,d]);o(24/a,[b,c,d]);o(24*a,[b,c,d])...等對每個數字操作的16個子問題,o(sum,[a,b,c,d])表示找到a,b,c,d之間各種可能的運算組合,使得最終的結果為sum。如果子問題中的sum小於0或者不為整數,那麼就停止搜尋。這個思想可以使用純遞迴加對結果去重,或者使用樹。複雜度跟第一種方法是一樣的。

思路已知,**實現起來比較簡單,

Android兩種常見錯誤(ANR和FC)解決辦法

anr activity not respone 無響應 先介紹下main執行緒 也稱為ui執行緒 主線程 功能 1.建立ui控制項 2.更新ui控制項狀態 3.事件處理 限制 main執行緒不建議有超過5秒的事件 出現條件 當使用者輸入事件5s內沒有得到響應,將彈出anr對話方塊 廣播接收者的on...

springmvc靜態資源過濾問題,兩種解決方法

1.tomcat的專案路徑設定為 2.springmvc.xml設定靜態資源不過濾 設定靜態資源不過濾 resources css location resources css resources js location resources js resources images location ...

python多執行緒資料同步安全問題(兩種解決方案)

import threading 如果多個執行緒同時訪問同乙個資源,就會造成執行緒得不安全 money 0 定義乙個函式用於存錢 def addmoney global money for i in range 1000000 money 1 print money 執行緒衝突情況 def conf...