0

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 ループに入れて、すべてを制御しようとしました。(まったく)うまくいかなかったので、コメントアウトしました。

4

2 に答える 2

0

えーと、私はここでは初めてで、プログラミング全般も初めてです。しかし、私もAbsolute Javaで作業しており、この問題を解決しました。

私はあなたのコードを実行していませんが、一見したところ、いくつかの問題があるようです。

(あるいは、私が間違っているかもしれません。自分の目で確かめてください。ここで私が考えていることをお知らせします。)

まず、あなたがそれを構造化した方法では、問題に対する複数の解決策を発見することはできないようです. 解決策に到達したらシステムを終了するように指示しますね。それとも私は誤解していますか?

第二に、2 つの変数が同じ数字に対応する解が見つかった場合は「続行」するようにプログラムに指示しますが、それらの解をカウントしないようにプログラムに指示しません。これがプログラミングの問題だと思います。要求されました。

第三に、「継続」がどのような役割を果たしているのかさえわかりません。ループを入れ子にすることで、すべての可能性/順列がコーディングのその時点で実現/考慮されることが保証されますね。では、ブール条件のポイントは何ですか?

私は、これらすべてにおいて、私がベースから外れている可能性を考えています。私は3週間だけプログラミングをしています。しかし、ここに私のコードがあります(すみません、ずさんです)。

(また、失敗した組み合わせ/割り当てを集計するために、そこに「カウンター」を投げたことがわかります。しかし、これでも混乱する可能性があります。繰り返しますが、私のコメントがここから離れている場合は申し訳ありません。)

public static void main(String[] args) {

int count = 0;

for (int G = 0; G <=9; G++)   
{
    for (int O = 0; O <=9; O++)
        for (int T = 0; T <=9; T++)
            for (int D = 0; D <=9; D++)

    if (((G != O) && (G != T) && (G != D) && 
            (O != T) && (O != D) && (T != D)) 
            && 
            ((400 *T) + (40 * O) + (4*O)) == 
            ((1000*G) + (100*O) + (10*O) + (1*D)))
    {
        System.out.println("G = " + G + "," + " O = " + O + "," + 
                "T = " + T + "," + "D = " + D);

    }
    else count = count +1;    
}
System.out.println(count);
于 2014-01-10T08:09:21.127 に答える