0

論理ループを使用して、合同でない三角形の 20 個のピタゴラス数を出力するにはどうすればよいですか。数字を繰り返さないと、つまり、4,3,5 がある場合、3,4,5 はありません。

「for」ループを使用していましたが、繰り返しの回答を削除する方法がわかりません。

for (k = 0; k < 50; k++)
    {
        for ( i = 0; i < 50; i++)
        {
            for ( j = 0; j < 50; j++)
            {
                if ( (k+1)*(k+1) + (i+1)*(i+1) == (j+1)*(j+1) )
                {
                    System.out.println( "\n\n\t\tThe numbers are : " + (k+1) + ", "
                                                                     + (i+1) + ", "
                                                                     + (j+1) );
                }
            }
        }
    }
4

1 に答える 1

2

2 つの (関連する) オプションが思い浮かびます: 各トリプルをソートされた順序で「保持」できるため、{4,3,5} が見つかったら、それを {3,4,5} に変換してから保存します。ユニークさのために他のものと比較します。boolean equals(final Triple rval)または、各要素を最低から最高まで比較するようなメソッドを定義する「トリプル」クラスを作成することもできます。もちろん、これを行う方法は他にもあります。

更新: 追加したばかりのコードを考えると、それらを印刷したいだけなら、上記で想定していたように、これまでに見つけたトリプルを保持する必要はおそらくないでしょう。コードを次のように変更すると、うまくいく可能性があります。

for (k = 0; k < 50; k++)
{
    for ( i = k; i < 50; i++)
    {
        for ( j = i; j < 50; j++)
        {
            if ( (k+1)*(k+1) + (i+1)*(i+1) == (j+1)*(j+1) )
            {
                System.out.println( "\n\n\t\tThe numbers are : " + (k+1) + ", "
                                                                 + (i+1) + ", "
                                                                 + (j+1) );
            }
        }
    }
}

内側のループの開始点を変更して、見つかったすべてのトリプルが次のように保持されるようにしたことに注意してください k <= i <= j。この制約によって一意性も確保されると思います。

于 2012-07-01T03:23:11.527 に答える