0

(ちなみに、配列はまだ使用していません。私はループの章にいます)

a と b が 0 以上 1000 以下で、比率 (a^2 + b^ 2 + 1) / (a*b) は整数です。

それについての私の方法は、ネストされたループを作成することです

for (a = 0; a <= 1000; a++)
    for (b = 0; b <= 1000; b++)
    {
        //answer = a^2 + b^2 + 1 / (a*b)
        //if (answer % 1 == 0)
        //    System.out.println("(" + a + ", " + b + ")") 
    }

それは正しく機能しますか、それとも私はこの問題をすべて間違って見ていますか

4

3 に答える 3

1

あなたのアプローチは正しいと思いますが、

ただ、ひとつだけ確認しておきたいのは、

あなたは式を使用しています:answer = a^2 + b^2 + 1 / (a*b)

しかし、あなたはあなたの質問で として言及しました(a^2 + b^2 + 1) / (a*b)

したがって、これらの括弧を使用していることを確認してください。そうしないと、演算子の優先順位によって問題が発生する可能性があります

のようなものは、完了1 / (a*b)後に解決され(a*b)ます。そのようにしたくありませんよね。そのため、演算子の優先順位に注意するか、括弧を使用してください。

于 2013-05-24T03:53:12.947 に答える
0

ネストされたループを使用すると、徹底的な検索が必要になりますが、おそらくこの問題に対する最も簡単なアプローチです。次の点に注意してください。

  1. この^演算子は実際にはXOR 演算子です。Math.pow(a, 2) を使用するか、a * a正方形を探している場合a
  2. 整数除算に注意
  3. おそらく、0 ではなく 1 でループを開始したいでしょう。
于 2013-05-24T04:03:50.497 に答える
0

私はあなたの表現を次のように変えることができます:

  1. (a^2 + b^2 + 1+2ab-2ab) / (a*b)
  2. ((a+b)^2-2ab)/(a*b)
  3. (a+b)^2/ab -2

したがって、方程式は単純なので、(a+b)^2/ab > 2 であることを確認する必要があります。最終的な確認は、2 つの数値の合計がその積で割り切れる必要があることです。

a=0 と b=0 は両方とも除数であるため、チェックを追加します。

于 2013-05-24T04:04:10.383 に答える