多人學習python,不知道從何學起,
很多人學習python,掌握了基本語法過后,不知道在哪里尋找案例上手,
很多已經做案例的人,卻不知道如何去學習更加高深的知識,
那么針對這三類人,我給大家提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的源代碼!??¤
QQ群:1057034340
1、

(答案見文末)
思路提示:
用程式解這類“智力題”有個屢試不爽的方法,就是“ 列舉法 ”,或者叫做“ 暴力解法 ”,就是對于存在有限種可能選擇的情況下,讓程式把每一種情況都試一遍,找出符合條件的解,
這題就可以暴力去解,
當然,暴力最好也要有頭腦的暴力,比如這里,5個3位數,從中去掉9個數,聽上去有點煩,但反過來想,其實不就是從里面挑6個數字嘛!
100、10、1、300、……、90、9,這15個數里面取6個,使得它們的和是1111,這我已經不能再提示了吧!
對了,再說一句:Python里有個取排列/組合的庫,叫做: itertools ,誰用誰知道
2.

為了方便討論,我給這些圓圈加上編號:

(答案見文末)
思路提示:
這題,比上一題復雜,因為它的不是一個規則的“形狀”,但它的可能性依然是有限,且不是很多,
9個數放進9個格子里,最多也就是9!= 362880 種情況,這對于計算機來說是個小case,關鍵在于你如何判斷某種情況是符合要求的,
如果你看過“ 資料結構 ”有關的書,應該會想到這個結構就是一個“ 圖 ”,我們可以將每個格子定義為一個類,也就是一個節點,每個節點有一個值,還有一個串列,記錄它相連其他節點,
判斷一個節點是否符合要求,就把它相連節點的值加起來,看看是否與它自己的值所對應的和相等,如果每個節點都符合,那就是我們要的答案,
不過呢,這題還有另一種思路,就是用“ 遞回 ”去解:
1. 判斷 n 個值和 n 個格子是否有解
2. 將一個“不違反條件”的值放入一個格子,然后判斷剩下 n-1 個值和 n-1 個格子是否有解,以此類推
3. 如果格子全部放完,即得到答案
4. 如果剩下的值里找不到“不違反條件”的值,則退回上一步,選擇下一個值繼續
不過就這題來說,遞回的條件設定有點復雜,我就不展開細說了,代碼里我也給了遞回的版本,
特別說明:列舉版本最后遍歷了 59674 種情況,在我的電腦上花了 0.18 秒“撞”到了答案;而遞回版本判斷了 5320 種情況,花了 0.015 秒,
3.

(答案見文末)
思路提示:
這題就不再適合暴力去解了,因為52個值分到4個盒子里,一共是有4的52次方,也就是 20282409603651670423947251286016 種情況……

但是仔細想一下,這題也不必暴力,我們只需要把52個值從小到大依次往盒子里放就行,只是放的時候需要判斷一下,哪個盒子是“不”能放的,即其中盒子里已有兩個數的和等于這個值,如果存在,那么就去下一個盒子,此處不留爺,自有留爺處!(處處不留爺,那一定是題目出錯了!)
OK,先就來這3題試試看吧!
講真,這種題雖然沒啥實際意義,但若真要你用代碼寫出來,也不是那么容易的,很考驗你對程式邏輯和資料結構的理解,所以,很多IT公司在招聘開發崗位時也會出一些類似的題,既是考察你分析問題的能力,也能看出你寫代碼的水平,講不定哪天你就在面試時碰到我發過的題目呢,(事實上,這種事已經發生過幾次了,甚至還有面試官就直接拿我的題目去面人的)

歡迎在留言區分享你的解答!如果大家對此類題目感興趣,之后我再多弄一些來,
本文題目來源自《思維高手:全世界聰明人都在做的200個思維游戲》
相關代碼:
crossin/snippet
智力題
答案:
1.
111
x3x
x7x
9xx
(此題共有5個解,參見代碼輸出)
2.
按圖上圓圈標記順序:
2, 5, 8, 9, 3, 4, 6, 7, 1
3.
[1, 2, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52],
[3, 5, 6, 12, 14, 21, 23, 30, 32, 39, 41, 48, 50],
[8, 9, 11, 15, 18, 35, 36, 38, 42],
[17, 20, 24, 26, 27, 29, 33, 45]
(此題也不是唯一解,比如把48放進盒子4也是可以的)
----
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/222676.html
標籤:其他
