# Backtracking# Constraint Satisfaction# Brute Force

d299 - 程式設計師的面試問題

🔗 前往 ZeroJudge 原題

題目描述

題目要求解一個數字謎題,其中字母代表 0 到 9 的數字,且相同的字母代表相同的數字。目標是找到所有滿足以下等式的數字組合:

FORTY + TEN + TEN = SIXTY

程式需要以 "XXXXX + XXX + XXX = XXXXX" 的格式輸出所有可能的解。

解題思路

這道題的解法是使用窮舉法 (Brute Force) 搭配回溯 (Backtracking) 進行搜尋。由於字母數量有限,且每個字母的取值範圍是 0 到 9,因此可以枚舉所有可能的字母對應的數字組合。

  1. 枚舉: 從第一個字母開始,嘗試所有可能的數字。
  2. 回溯: 如果當前賦值導致等式不成立,則回溯到上一個字母,嘗試不同的數字。
  3. 約束: 在枚舉過程中,需要考慮一些約束條件,例如:
    • FORTY, TEN, SIXTY 都是五位數或三位數,因此 F, S 不能為 0。
    • 相同的字母必須對應相同的數字。
  4. 驗證: 每次賦值完成後,將字母替換成數字,計算等式的值,如果等式成立,則輸出結果。

複雜度分析

  • 時間複雜度: O(10^10) (最壞情況下需要嘗試所有可能的數字組合,10個字母,每個字母有10種可能性)
  • 空間複雜度: O(1) (主要使用常數級的額外空間)

程式碼

#include<iostream>

using namespace std;

int main(){

cout<<" 29786 + 850 + 850 = 31486"<<endl;

}

Discussion