亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在面試中的一個邏輯題,求助下要如何解決?

在面試中的一個邏輯題,求助下要如何解決?

ABOUTYOU 2018-08-02 18:38:47
計算任選 3個 (1 到 9 )的自然數,他們能通過 加減乘數 運算組合 形成 24 。例如 , 1,3,8 就能 通過 1X3X8 這樣的運算 得到 24. 或者 7+8 +9 = 24把所有 符合這個條件的數字 組合 列出來。 不考慮順序。 7,8,9 和 8,9,7 是一組數字。如果要用代碼要怎么寫?
查看完整描述

2 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

https://img1.sycdn.imooc.com//5b670da20001082a05130322.jpg

查看完整回答
反對 回復 2018-08-05
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

最簡單的就是窮舉,先把1~9的數字的三位不重的排列窮舉出來,然后再給每種排列加上運算符,窮舉出所有后綴表達式,再求值,最后去重。這是最簡單,也是效率最低的方法。

然后進一步考慮題目的特點,不妨規定找到的數字序列前兩位優先運算,然后再和最后一位運算。容得三位數要運算得到一個結果,要且僅要兩次運算。考慮最后一次運算,最后一次運算必然是四則運算中的其中一個,于是目標轉化為窮舉出經過一次四則運算可以得到24的長度為2的數字序列,且該序列的第二個數為1~9這9個整數中的其中一個,第一個數為1~9這9個整數中除了該序列的第二個數外的兩個的運算的結果。

比如最后一次運算是加法,則這樣窮舉

? + 1 = 24 => 23? + 2 = 24 => 22? + 3 = 24 => 21...
? + 9 = 24 => 15

最后一次運算是減法,則這樣窮舉

? - 1 = 24 => 25
? - 2 = 24 => 26
? - 3 = 24 => 27...
? - 9 = 24 => 33

最后一次運算是乘法,則這樣窮舉

? * 1 = 24 => 24.0
? * 2 = 24 => 12.0
? * 3 = 24 => 8.0...
? * 9 = 24 => 2.666666666666667

最后一次運算是除法,則這樣窮舉

? / 1 = 24 => 24
? / 2 = 24 => 48
? / 3 = 24 => 72...
? / 9 = 24 => 216

可以注意到,有一些結果是不可能的,例如216 / 9 = 24,就算允許重復,9 * 9最多也不過81,從而兩位不同的1~9的整數的四則運算無法達到216。

于是我們窮舉出了所有兩位1~9的整數的四則運算可能得到的結果(有些是不可能的,可以剪枝),繼續窮舉,我們即可得到結果(會有重復)

? + ? = 23 => 兩位不同的1~9的整數的加法運算的結果最多為17,剪枝
...
? + ? = 17 => 兩位不同的1~9的整數的加法運算的結果最多為17,可以繼續
? + 1 = 17 => 16 // 不符合題意,舍去
? + 2 = 17 => 15 // 不符合題意,舍去...
? + 8 = 17 => 9 // 符合題意,得到序列9、8、7,運算為(9+8)+7
? + 9 = 17 => 8 // 符合題意,但相同的序列和運算已經存在...

最后還要去重,或者說判斷當前窮舉出來的序列和運算是否與前面已經得到過的序列和運算等價,這個自己寫就好了。

24點牌算法是比較經典的數據結構與算法課程的例題,搜索一下會有更多結果,以上只是我臨時的思路,以我的水平,這一定不是最優的解法(沒錯,我之前沒做過這題233)

技不如人,甘拜下風


查看完整回答
反對 回復 2018-08-05
  • 2 回答
  • 0 關注
  • 1628 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號