用Java求解数学菱形
在用java搜索了一个钻石问题解决程序之后,我所能找到的就是OOP钻石问题。那不是我想要的。我要找的是java中的一个简单函数,用于找到钻石问题的解决方案 钻石问题可以这样表述: A=C*D B=C+D 因此,如果: A=10,B=7 C=5,D=2 我试图用java快速有效地解决钻石问题。我尝试过嵌套for循环,但由于程序的性质,它们效率极低 如果有人有什么想法,我很乐意听听用Java求解数学菱形,java,math,Java,Math,在用java搜索了一个钻石问题解决程序之后,我所能找到的就是OOP钻石问题。那不是我想要的。我要找的是java中的一个简单函数,用于找到钻石问题的解决方案 钻石问题可以这样表述: A=C*D B=C+D 因此,如果: A=10,B=7 C=5,D=2 我试图用java快速有效地解决钻石问题。我尝试过嵌套for循环,但由于程序的性质,它们效率极低 如果有人有什么想法,我很乐意听听 谢谢 我懒得替你做代数题,只需解c和d的a和b 大概是 `C = A + B/A` disclimer,我刚刚创造了
谢谢 我懒得替你做代数题,只需解
c
和d
的a
和b
大概是
`C = A + B/A`
disclimer,我刚刚创造了上面的表达式,但同样的概念也随之而来。你可以自己做代数
也许您可以根据您知道的值来执行某种类型的switch语句。有4个选择2个(就像6个)不同的情况我懒得为你做代数,但只需根据
a
和b
求解c
和d
大概是
`C = A + B/A`
disclimer,我刚刚创造了上面的表达式,但同样的概念也随之而来。你可以自己做代数
也许您可以根据您知道的值来执行某种类型的switch语句。有4个选择2个(类似于6个)不同的情况这只是一对联立方程组,可以通过分析来解决,而无需借助数字运算 重新排列第二行,得到
C=B-D
,并替换为第一行。这在D
中给出了一个二次函数:
A = D * (B - D)
D = (B +/- sqrt(B^2 - 4*A)) / 2
到目前为止,我们为D
提供了一对解决方案:
A = D * (B - D)
D = (B +/- sqrt(B^2 - 4*A)) / 2
现在将这些解替换回第2行,以求解
C
这只是一对联立方程组,可以通过解析法求解,而无需借助数字运算
重新排列第二行,得到C=B-D
,并替换为第一行。这在D
中给出了一个二次函数:
A = D * (B - D)
D = (B +/- sqrt(B^2 - 4*A)) / 2
到目前为止,我们为D
提供了一对解决方案:
A = D * (B - D)
D = (B +/- sqrt(B^2 - 4*A)) / 2
现在将这些解替换回第2行,以解
C
如果我们观察以下代数:
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
,这将产生问题。。。在这种情况下,答案无论如何都是虚构的。如果我们观察以下代数:
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
,这将产生问题。。。在这种情况下,答案无论如何都是虚构的。谁说解必须是整数?:)素数A=7,B=8,C=1,D=7如果A为非零,B为0,那么它是不可解的。如果A=1300837,B=0,C=isqrt(1300837),D=-isqrt(1300837)你在想象事物,@durron597。谁说解必须是整数?:)素数A=7,B=8,C=1,如果A=1300837,B=0,C=isqrt(1300837),D=-isqrt(1300837)你在想象事情,@durron597。这不是问题,但通常的约束条件是找到一个整数答案。你会得到这样的结果:A/(B-C)=C
,这是不可解的。这个答案行不通。@PicklishDoorknow我在回答中确实说过,我制定了具体的公式,特别告诉op“你可以自己做代数”我刚才正在写如何将你的数学解转换成java解……虽然从数学上讲,在这种情况下,要推导出一个C或D的公式是不可能的。@PicklishDoorKnow:实际上有一个公式。看我的答案这不是问题,但通常约束条件是找到一个整数答案。你最终会得到这样的结果:A/(B-C)=C
,这是无法解决的。这个答案行不通。@PicklishDoorknow我在回答中确实说过,我制定了具体的公式,特别告诉op“你可以自己做代数”我刚才正在写如何将你的数学解转换成java解……虽然从数学上讲,在这种情况下,要推导出一个C或D的公式是不可能的。@PicklishDoorKnow:实际上有一个公式。看到我的答案了吗?你的意思是C=B-D吗?是的,这个答案有很多mistakes@splungebob对我的错,C=B/D?你的意思是C=B-D吗?是的,这个答案有很多mistakes@splungebob对我的错误。