計(jì)算任選 3個(gè) (1 到 9 )的自然數(shù),他們能通過(guò) 加減乘數(shù) 運(yùn)算組合 形成 24 。例如 , 1,3,8 就能 通過(guò) 1X3X8 這樣的運(yùn)算 得到 24. 或者 7+8 +9 = 24
把所有 符合這個(gè)條件的數(shù)字 組合 列出來(lái)。 不考慮順序。 7,8,9 和 8,9,7 是一組數(shù)字。如果要用代碼要怎么寫(xiě)?
最簡(jiǎn)單的就是窮舉,先把1~9的數(shù)字的三位不重的排列窮舉出來(lái),然后再給每種排列加上運(yùn)算符,窮舉出所有后綴表達(dá)式,再求值,最后去重。這是最簡(jiǎn)單,也是效率最低的方法。
然后進(jìn)一步考慮題目的特點(diǎn),不妨規(guī)定找到的數(shù)字序列前兩位優(yōu)先運(yùn)算,然后再和最后一位運(yùn)算。容得三位數(shù)要運(yùn)算得到一個(gè)結(jié)果,要且僅要兩次運(yùn)算。考慮最后一次運(yùn)算,最后一次運(yùn)算必然是四則運(yùn)算中的其中一個(gè),于是目標(biāo)轉(zhuǎn)化為窮舉出經(jīng)過(guò)一次四則運(yùn)算可以得到24
的長(zhǎng)度為2的數(shù)字序列,且該序列的第二個(gè)數(shù)為1~9這9個(gè)整數(shù)中的其中一個(gè),第一個(gè)數(shù)為1~9這9個(gè)整數(shù)中除了該序列的第二個(gè)數(shù)外的兩個(gè)的運(yùn)算的結(jié)果。
比如最后一次運(yùn)算是加法,則這樣窮舉
? + 1 = 24 => 23
? + 2 = 24 => 22
? + 3 = 24 => 21
...
? + 9 = 24 => 15
最后一次運(yùn)算是減法,則這樣窮舉
? - 1 = 24 => 25
? - 2 = 24 => 26
? - 3 = 24 => 27
...
? - 9 = 24 => 33
最后一次運(yùn)算是乘法,則這樣窮舉
? * 1 = 24 => 24.0
? * 2 = 24 => 12.0
? * 3 = 24 => 8.0
...
? * 9 = 24 => 2.666666666666667
最后一次運(yùn)算是除法,則這樣窮舉
? / 1 = 24 => 24
? / 2 = 24 => 48
? / 3 = 24 => 72
...
? / 9 = 24 => 216
可以注意到,有一些結(jié)果是不可能的,例如216 / 9 = 24
,就算允許重復(fù),9 * 9
最多也不過(guò)81
,從而兩位不同的1~9的整數(shù)的四則運(yùn)算無(wú)法達(dá)到216
。
于是我們窮舉出了所有兩位1~9的整數(shù)的四則運(yùn)算可能得到的結(jié)果(有些是不可能的,可以剪枝),繼續(xù)窮舉,我們即可得到結(jié)果(會(huì)有重復(fù))
? + ? = 23 => 兩位不同的1~9的整數(shù)的加法運(yùn)算的結(jié)果最多為17,剪枝
...
? + ? = 17 => 兩位不同的1~9的整數(shù)的加法運(yùn)算的結(jié)果最多為17,可以繼續(xù)
? + 1 = 17 => 16 // 不符合題意,舍去
? + 2 = 17 => 15 // 不符合題意,舍去
...
? + 8 = 17 => 9 // 符合題意,得到序列9、8、7,運(yùn)算為(9+8)+7
? + 9 = 17 => 8 // 符合題意,但相同的序列和運(yùn)算已經(jīng)存在
...
最后還要去重,或者說(shuō)判斷當(dāng)前窮舉出來(lái)的序列和運(yùn)算是否與前面已經(jīng)得到過(guò)的序列和運(yùn)算等價(jià),這個(gè)自己寫(xiě)就好了。
24點(diǎn)牌算法是比較經(jīng)典的數(shù)據(jù)結(jié)構(gòu)與算法課程的例題,搜索一下會(huì)有更多結(jié)果,以上只是我臨時(shí)的思路,以我的水平,這一定不是最優(yōu)的解法(沒(méi)錯(cuò),我之前沒(méi)做過(guò)這題233)
技不如人,甘拜下風(fēng)
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專(zhuān)業(yè)的國(guó)家
北大青鳥(niǎo)中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。