0

Javaで菱形継承問題ソルバーに対して激しいグーグルを行った後、私が見つけたのはOOP菱形継承問題だけでした。それは私が求めているものではありません。私が探しているのは、ダイヤモンド問題の解決策を見つけるためのJavaの単純な関数です。

菱形継承問題は次のように表すことができます。

A = C * D、

B = C + D

したがって、次の場合:

A = 10、B = 7

C = 5、D = 2

私がやろうとしているのは、Javaのダイヤモンド問題を迅速かつ効果的に解決することです。ネストされたforループを試しましたが、プログラムの性質上、非常に非効率的です。

誰かアイデアがあれば聞いてみたいです。

ありがとう!

4

3 に答える 3

2

これは単なる連立方程式のペアであり、数値計算に頼ることなく解析的に解くことができます。

2番目の行を再配置C = B - Dして、最初の行に置き換えます。これにより、次の2次式が得られDます。

A = D * (B - D)

二次方程式により、次の2つの解が得られDます。

D = (B +/- sqrt(B^2 - 4*A)) / 2

次に、これらのソリューションを2行目に置き換えて、を解きCます。

于 2012-11-08T21:51:01.113 に答える
1

次の代数を観察すると:

B^2 - 4A = (C^2 + 2CD + C^2) - 4CD = (C^2 - 2CD + D^2) = (C-D)^2

次に、この関数をすばやく簡単に作成できます。

public static double[] diamondSolve(double a, double b) {
    double temp = b * b - 4 * a;
    double difference = Math.sqrt(temp); // difference = C - D

    double[] retArray = new double[2];

    // (b + difference) / 2 = (C + D + C - D) / 2 = 2C / 2 = C
    retArray[0] = (b + difference) / 2;

    // B - C = C + D - C  = D
    retArray[1] = b - retArray[0];

    return retArray;
}

ちなみに、これは...4Aより大きい場合に問題が発生B^2します。その場合、答えはとにかく虚数です。

于 2012-11-08T22:01:27.540 に答える
0

私はあなたのために代数をするのが面倒cですdab

だから何かのような

`C = A + B/A`

Disclimer、私は上記の表現を作成しましたが、同じ概念が続きます。あなたはあなた自身の代数をすることができます。

知っている値に応じて、ある種のswitchステートメントを実行できるかもしれません。4つの選択2(6のような)異なるケースがあります

于 2012-11-08T21:45:09.137 に答える