如何在java中找到A、B和C的值
给定以下值X,Y,Z,例如(0≤十、 Y,Z≤10000)考虑以下三个方程式:如何在java中找到A、B和C的值,java,algorithm,for-loop,if-statement,numbers,Java,Algorithm,For Loop,If Statement,Numbers,给定以下值X,Y,Z,例如(0≤十、 Y,Z≤10000)考虑以下三个方程式: a+b+c=X abc=Y a^2+b^2+c^2=Z 我需要找到a、b和c的值,我用java写了这样的东西: for (int a = 0 ; x<= num; x++){ for(int b =0 ; y<=num; y++){ for(int c=0 ; z<=num; z++){ int power = (int
for (int a = 0 ; x<= num; x++){
for(int b =0 ; y<=num; y++){
for(int c=0 ; z<=num; z++){
int power = (int) Math.pow(a,2) + (int) Math.pow(b,2)+ (int) Math.pow(c,2);
if((x+y+z == X) && (x*y*z==Y) && (power==Z)){
System.out.println(a+" "+b+" "+c);
System.exit(0);
}
}
}
}
System.out.println("no values found");
for(int a=0;x如果您不想(或可以)通过分析解决它,并且解决方案保证为整数(或您只寻找整数解决方案),那么此代码将起作用,并且还处理负数:
package test;
import java.util.Scanner;
public class TestIntEquation {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
long X=in.nextLong();
long Y=in.nextLong();
long Z=in.nextLong();
int[] sign= {1,-1};
for (long a=0;a*a<=Z;a++) {
for (long b=0;a*a+b*b<=Z;b++) {
long c=(long) Math.sqrt(Z-a*a-b*b);
if (a*a+b*b+c*c!=Z) continue;
long mul=a*b*c;
if (mul!=Math.abs(Y)) continue;
for (int signA: sign) {
for (int signB: sign) {
for (int signC: sign) {
if (signA*a==signB*b||signA*a==signC*c||signB*b==signC*c) continue;
long sum=signA*a+signB*b+signC*c;
mul=signA*a*signB*b*signC*c;
if (sum==X&&mul==Y) {
System.out.println(a*signA+" "+b*signB+" "+c*signC);
return;
}
}
}
}
}
}
System.out.println("no values found");
}
}
封装测试;
导入java.util.Scanner;
公共类证明等式{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
长X=in.nextLong();
长Y=in.nextLong();
长Z=in.nextLong();
int[]符号={1,-1};
对于(长a=0;a*a你是否考虑过将方程重新排列为f(b,c,X,Y,Z)
的形式,然后求解a
。那么你只需要两个循环。进一步的简化也是可能的。是的,我对b和c使用了两个循环,对a=X-(b+c)这样的方程进行了求解但是仍然得到了错误的答案。@WJSa,b,c
是多项式t^3-X*t^2+(X^2-Z)的零/2*t-Y
对于第三个例子,不是-4^2+-6^2+10^2=152
,也不是48
?@NadaAlbargawi那么你一定输入错了,因为正确答案是152。对负数求平方会产生一个正结果,所以它是16+36+100,也就是152。非常感谢,非常感谢。祝你为他度过美好的一天lping