## 【38】Pandigital multiples積連接(泛位數的倍數) 將192分別與1, 2, 3相乘: * 192 × 1 = 192 * 192 × 2 = 384 * 192 × 3 = 576 將各個積連接起來,我們得到一個1到9的泛位數192384576,我們稱192384576是192和(1, 2, 3)的「積連接」。 同樣地,還可以將9分別與1, 2, 3, 4, 5相乘,得到的積連接是一個1到9的泛位數918273645。 請求出1到9的最大泛位數,並且它是某個整數與(1, 2, ... ,n)的積連接(n>1)。 #### 檢驗一下已知情況 #### (1)192和(1,2,3)的「積連接」: ![](https://i.imgur.com/XzBjrXu.png) #### (2) 9和(1,2,3,4,5)的「積連接」: ![](https://i.imgur.com/E8Fqo8R.png) ### 練習1:做一個函式,輸入長度9的數字串,判斷字串是否1~9數字各一個,不缺不重複。 ![](https://i.imgur.com/Twb3G57.png) 上面的方法當然不完整,主要檢查9個數字和是否45,在迴圈中將字串的每一個字元先轉換成整數,再相加判斷是否45,當然依定要輸入長度為9的數字串,這關係到下一個練習的要求。 有幾個問題: (1)字串中有0呢?必然有其他重複字元。(可以在源頭避開0或檢驗時避開) 例如checkPM("995319906") (2)就算沒有0,也可能有重複字元。(可以不管0,只要是能比對出來) 例如checkPM("992119842") #### 重點就是字元1~9不能重複,請你完善這個問題。 *也可以不用字串輸入,改以數字處理。 *或者用list處理,因為list可以很簡單排序,例如: ![](https://i.imgur.com/GRfVGsc.png) *int()可以將字元變成數字,而str()可以將數字變成字串,善加利用。 ### 練習2:嘗試1到200中,對1~9做積連接 1~9不知道需要乘到哪一個,i=1時,需要乘到9,i=9時,需要乘到5,當數字變大時,看起來只要乘到3就夠了。 設計重點: (1) 隨時將乘出的數字,累加到字串後面,當長度超過或等於9就不必乘算後面,迴圈用break跳出。 (2) 必須長度剛好等於9,而且通過練習1的checkPM()驗證 ![](https://i.imgur.com/V0mt7mp.png) 觀察上式,只有i=1、9、192才是真的對1~9做積連接,所以重點是checkPM()驗證函式的改良。 上例i=9時,918273645是最大值,但還不夠大, ## 請求出1到9的最大泛位數,並且它是某個整數與(1, 2, ... ,n)的積連接(n>1)。