找出四位數 abcd 與一位數 e,滿足:abcd × e = dcba,其中 a ≠ 0、e ∉ {0,1}。
abcd × e 仍為四位數 ⇒ abcd ≤ 9999/e。因 e ≥ 2,故 abcd ≤ 4999,即 a ∈ {1,2,3,4}。d × e ≡ a (mod 10)。a × e + 進位 = d,且 d ≠ 0(否則結果非四位數)。e = 2..9、a = 1..4,配合上述約束快速縮減搜尋空間。public class AbcdPuzzle {
public static void main(String[] args) {
for (int e = 2; e <= 9; e++) {
for (int n = 1000; n <= 4999; n++) { // a≠0 且 abcd≤4999
int reversed = reverse(n);
if (n * e == reversed) {
System.out.printf("abcd = %d, e = %d%n", n, e);
}
}
}
}
static int reverse(int x) {
return (x % 10) * 1000 + (x / 10 % 10) * 100 + (x / 100 % 10) * 10 + x / 1000;
}
}
abcd = 2178, e = 4
驗證:2178 × 4 = 8712 ✓
在 e ∈ [2,9]、abcd ∈ [1000, 4999] 範圍內,僅此一組解。若放寬 e 為多位數或允許前導零,解集會改變,但題目限定 e 為一位數非 0/1,故解唯一。
abcd × e = abcd (回文數) 怎麼解?abc... × e = ...cba,可用回溯/約束規劃求解。此題展示「數學約束 + 窮舉」解決整數反轉乘法謎題的經典模式。