#46130: 這題可以先建表、窮舉,之後再查表即可


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-09-21 22:24:46

動手前先確認要窮舉的範圍

 

題目要求尋找 num1 / num2 可整除

2 <= 商 <= 80 的組合

 

第一次篩選範圍:

已知 num1num2 最多為 5 位數,故我們只需要檢查小於 100000 以內的數字組合即可

 

第二次篩選範圍:

已知所有數字只會用一次,可推斷出 num2 最小可能的數值為 01234 (沒辦法更小了)

 

第三次篩選範圍:

已知商最小為 2,則兩數必定滿足 num1 >= num2 * 2

又兩數最大為 5 位數,則可推斷出 num2 最大可能的值為 49876 (再更大的話乘 2 就會超過五位數)

 

--

 

決定好窮舉的範圍後就可以動手了

第一層 for 循環 num2 的值,從 1234 到 49876

然後檢查 num1 是否合法(每一位數都不重複)

第二層 for 循環 num1 的值,從 num2 * 2 到 100000 為止,每次增加 num2

這樣做可以確保每次循環到的數字都一定是 num1 的整數倍,可以篩掉大部分無關的數字,不用一個一個試除

 

虛擬碼:

建表(有鍵值對的資料結構,例如python的字典)
從 01234 for 循環 num2 到 49876:
if num2 每一位數字都不同:
  for 循環 num1,從 num2 * 2 開始,每次增加 num2,直到 num1 < 100000 為止:
if (num1 為五位數) 且 (num1 和 num2 的每一位數字都沒有重複的):
          存起來

 

最後需要根據輸入的數值查表就可以了

 

參考答案: gist(python)