2016-06-11 68 views
0

我想解決這個加密算法難題TWO + TWO = FOUR,我用了一個原始的蠻力,但我無法弄清楚我犯的錯誤。這裏的想法是,它試圖從0到10的所有可能的數字組合,並且所有分配給字符的數字必須是不同的。根據定義加密算術難題

cryptarithmetic puzzle是一種數學遊戲,其中一些數字的數字由字母(或符號)表示。每個字母 代表一個唯一的數字。我們的目標是找到這樣一個 給數學等式驗證數字: 在這種情況下:

TWO 
+ TWO 
------ 
= FOUR 

此代碼遍歷所有可能的組合,直到找到滿足問題的解決方案。約束條件在else if聲明中給出。 第一個if聲明只是檢查數字是否相同,如果它們是,它只是跳過該迭代。

我希望的輸出是看到全部顯示正確的解決方案。

int T, W, O, F, U, R; 

for (T = 0; T < 10; T++) 
{ 
    for (W = 0; W < 10; W++) 
    { 
     for (O = 0; O < 10; O++) 
     { 
      for (F = 0; F < 10; F++) 
      { 
       for (U = 0; U < 10; U++) 
       { 
        for (R = 0; R < 10; R++) 
        { 
         if ((T == W) || (T == O) || (T == F) || (T == U) || (T == R) || (W == O) || (W == F) || (W == U) || (W == R) || (O == F) || (O == U) || (O == R) || (F == U) || (F == R) || (U == R)) 
         { 
          continue; 
         } 
         else if (200 * T + 20 * W + 2 * O == F * 1000 + O * 100 + U * 10 + R * 0) { 
          cout << "T = " << T << endl 
           << "W = " << W << endl 
           << "O = " << O << endl 
           << "F = " << F << endl 
           << "U = " << U << endl 
           << "R = " << R << endl << endl; 
          break; 
         } 
        } 
       } 
      } 
     } 
    } 
} 

我得到一堆的結果,有趣的是,只有最後的結果是好的,它給出了:

T = 7 
W = 6 
O = 5 
F = 1 
U = 3 
R = 0 
+0

解釋代碼和它的功能沒有什麼壞處,因爲所有的循環都很難 – Li357

回答

3

R * 0應該R * 1

正巧是正確的,你得到的答覆是一個地方R = 0(因爲當R0R * 0是一樣的R * 1)。我想你也想從1開始F,因爲典型的密碼不允許前導零。

+1

你是我的英雄:) – mrGreenBrown

+0

@mrGreenBrown如果這回答了你的問題,你可以點擊旁邊的複選標記。這將標記你的問題爲答案,並給你和M.M一個小代表。 – computerfreaker