如何在java中找到A、B和C的值

如何在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

给定以下值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) 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)这样的方程进行了求解但是仍然得到了错误的答案。@WJS
    a,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