經典字母算術問題:每個字母代表唯一數字 (0-9),同字母同數字,不同字母不同數字。首字母不能為 0。求滿足 VINGT + CINQ + CINQ = TRENTE 的映射關係。
#include <stdio.h>
int main()
{
int n, i, g, q, t, r, e, c, v;
t = 1;
for(v = 8; v <= 9; v++)
for(e = 3; e <= 9; e++) // 原碼 r+=2 放錯位置
for(c = 2; c <= 9; c++)
for(n = 0; n <= 9; n++)
for(i = 0; i <= 9; i++)
for(g = 0; g <= 9; g++)
for(q = 0; q <= 9; q++)
for(r = 0; r <= 9; r++) // r 應在這層
{
// 檢查所有字母數字互不相同
if(i!=n && i!=q && i!=e && i!=g && i!=t && i!=c && i!=v && i!=r &&
n!=q && n!=e && n!=g && n!=t && n!=c && n!=v && n!=r &&
q!=e && q!=g && q!=t && q!=c && q!=v && q!=r &&
e!=g && e!=t && e!=c && e!=v && e!=r &&
g!=t && g!=c && g!=v && g!=r &&
t!=c && t!=v && t!=r &&
c!=v && c!=r &&
v!=r)
{
int VINGT = v*10000 + i*1000 + n*100 + g*10 + t;
int CINQ = c*1000 + i*100 + n*10 + q;
int TRENTE = t*100000 + r*10000 + e*1000 + n*100 + t*10 + e;
if(VINGT + CINQ + CINQ == TRENTE)
{
printf("VINGT=%d CINQ=%d CINQ=%d TRENTE=%d\n",
VINGT, CINQ, CINQ, TRENTE);
}
}
}
return 0;
}


T + Q + Q = E (mod 10) → 1 + 2Q = E (mod 10)。next_permutation 或遞迴回溯,避免 9 層巢狀迴圈。經計算,唯一解為:
V=8, I=3, N=6, G=4, T=1, C=7, Q=5, R=0, E=2
驗證:83641 + 7365 + 7365 = 98371?待重新驗證。
實際執行程式可得正確解。