在java中为钻石问题求解器做了一些激烈的谷歌搜索后,我所能找到的只是OOP钻石问题。那不是我追求的。我正在寻找的是java中的一个简单函数,用于找到钻石问题的解决方案。
钻石问题可以这样表达:
A = C * D,
B = C + D
所以,如果:
A = 10,B = 7
C = 5,D = 2
我正在尝试做的是快速有效地解决java中的钻石问题。我尝试过嵌套for循环,但由于程序的性质,它们的效率非常低。
如果有人有任何想法,我很乐意听到。
谢谢!
答案 0 :(得分:2)
这只是一对联立方程,可以通过分析求解,而无需使用数字运算。
重新排列第二行以获取C = B - D
并替换为第一行。这给出了D
中的二次方:
A = D * (B - D)
通过quadratic formula,我们为D
提供了一对解决方案:
D = (B +/- sqrt(B^2 - 4*A)) / 2
现在将这些解决方案替换回第2行以解决C
。
答案 1 :(得分: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
,这会产生问题...在这种情况下答案是虚构的。
答案 2 :(得分:0)
我懒得为你做代数,但就c
和d
a
和b
类似
`C = A + B/A`
exposimer,我刚才做了上面的表达,但是接着是相同的概念。你可以做自己的代数。
也许你可以做某种切换声明取决于你知道什么值。有4个选择2(就像6个)不同的情况