else if (400*T + 40*O + 4*O == 1000*G + 100*O + 10*O + D)
編集: プログラムが動作するようになりましたが、パズルを解く鍵となる部分を明確にする必要があります。プログラムのすべての部分を完全に理解したいだけです、ありがとう。
これはレビューのみを目的としており、私はそれを理解するために数時間を費やしました. 変数がすべてゼロになっているか、無限ループになっています。本に書かれているように、ここに質問があります:
「暗号算術パズルでは、数式は文字を使用して記述されます。各文字は 0 から 9 までの数字ですが、2 つの文字が同じであってはなりません。サンプルの問題は次のとおりです。SEND + MORE = MONEY パズルの解は S です。 = 9、R = 8、O = 0、M = 1、Y = 2、E = 5、N = 6、D = 7. 次の暗号算術パズルの解を見つけるプログラムを作成してください: TOO + TOO + TOO + TOO = GOOD 最も単純な手法は、一意の文字 (この場合は T、O、G、D) ごとにネストされたループを使用することです. ループは、0 から 9 までの数字を各文字に体系的に割り当てます. たとえば、最初に T = 0、O = 0、G = 0、D = 0、次に T = 0、O = 0、G = 0、D = 1、次に T = 0、O = 0、G = 0、D = 2 を試す可能性があります。など、T = 9、O = 9、G = 9、D = 9 まで。ループ本体で、各変数が一意であり、方程式が満たされていることをテストします。式を満たす文字の値を出力してください。」
public class PracticeProjectEight
{
public static void main(String[] args)
{
int T = 0 , O = 0 , G = 0 , D = 0;
boolean keepGoing = true;
//boolean againT = true , againO = true , againG = true , againD = true ;
// while (keepGoing)
//{
for (T = 0 ; T > 10 ; T++)
{
for (O = 0 ; O > 10 ; O++)
{
for (G = 0 ; G > 10 ; G++)
{
for (D = 0 ; D > 10 ; D++)
{
if ((D == G) || (D == O) || (D == T) || (G == O) || (G == T) || (O == T))
{
//keepGoing = true;
continue;
}
else if (400*T + 40*O + 4*O == 1000*G + 100*O + 10*O + D)
{
//keepGoing = false;
System.out.println("T = " + T);
System.out.println("O = " + O);
System.out.println("G = " + G);
System.out.println("D = " + D);
System.exit(0);
}
}
}
}
}
//}
}
}
ご覧のとおり、私はすべての for ループを while ループに入れて、すべてを制御しようとしました。(まったく)うまくいかなかったので、コメントアウトしました。