0

私はこの暗号化パズル TWO + TWO = FOUR を解こうとしていますが、生のブルート フォースを使用しましたが、どこで間違いを犯しているのかわかりません。ここでの考え方は、0 から 10 までの数字のすべての可能な組み合わせを試し、文字に割り当てられるすべての数字が異なる必要があるということです。定義により

暗号算術パズルは、いくつかの数字の数字が文字 (または記号) で表される数学ゲームです。各文字は一意の数字を表します。目標は、与えられた数式が検証されるような数字を見つけることです: この場合:

   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
4

1 に答える 1

4

R * 0する必要がありますR * 1

あなたがたまたま正解した答えは、(R = 0 なぜなら when Risは と同じだから) でした。また、通常、暗号化では先行ゼロが許可されていないため、最初から始めたいと思います。0R * 0R * 1F1

于 2016-06-11T03:27:00.133 に答える