動手前先確認要窮舉的範圍
題目要求尋找 num1 / num2
可整除
且 2 <= 商 <= 80
的組合
第一次篩選範圍:
已知 num1
和 num2
最多為 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的字典) |
最後需要根據輸入的數值查表就可以了
參考答案: gist(python)