for (W_ws=最小; W_ws<=最大; W_ws++) 驗算
缺點:需自定大整數型別、實作賦值/加一/比較,且搜索空間高達 9×10²⁰(21 位),不可行。
for (d1=1..9) for (d2=0..9) ... for (dW=0..9) 驗算
搜索空間同方案 1,但避免大整數型別。仍太大。
觀察:110 與 101 的各位數 3 次方和相同(1+1+0)。只需驗算非遞增數字組合:
for (d1=9; d1>0; d1--)
for (d2=d1; d2>=0; d2--)
...
for (dW=dW-1; dW>=0; dW--)
驗算
搜索空間劇減:21 位十進位僅 C(30,9)-1 = 14,307,149 種組合(約 1.4 千萬),完全可在 3 分鐘內完成。
pow[d] = d^N (d=0..9)。sum = Σ pow[di]。sum 的各位數字組成是否與當前組合一致(排序後比對)。sum 為解。切換 CESHI 模式(N=3),編譯執行,確認輸出 153、370、371、407 等水仙花數,邏輯正確後再切換 QIUJIE 求解 21 位問題。
「寫代碼是簡單的,想代碼應該怎麼寫是困難的。用代碼行數衡量程式設計師工作量是愚蠢的。」
本系列展示了從問題分析、搜索空間數學優化、測試先行到模組化實作的完整工程思維。