【发布时间】:2021-05-14 20:02:16
【问题描述】:
给定以下值 X,Y,Z,例如 (0≤X,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");
但这是一个幼稚的解决方案,因为 a、b 和 c 的值可以是零、正数或负数,并且必须是不同的 (a≠b≠c)。
例如:
- 输入:6 6 14 - 输出:1 2 3
- 输入:1 2 3 - 输出:未找到值
输入代表 x,y,z,输出代表 a,b,c。有人可以让我走上正确的道路并帮助我。
【问题讨论】:
-
您是否考虑过将方程重新排列为
f(b,c,X,Y,Z)的形式并求解a。那么你只需要两个循环。进一步减少也是可能的。 -
是的,我已经为 b 和 c 使用了 2 个循环并解决了这样的 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。
标签: java algorithm for-loop if-statement numbers