如何从 Java 中的一组数字中找到完全平方?
How do I find perfect square from a set of numbers in Java?
所以我想找出一组数字中的完美平方。我声明了必要的变量,添加了一个 for 循环,添加了一个 sqroot = Math.sqrt(num)
和一个打印方法来列出数字。我想不通的是如何让程序在数字范围内挑选出完美的正方形,并求出它们的平均值?
这是我正在为 class 完成的一项作业,我已经在这上面停留了一段时间。我也是 Java 的新手,如果这是一个愚蠢的问题,我深表歉意。代码如下:
public class Test {
public static void main(String[] args) {
int num;
double sqroot = 0;
int sumPsq = 0; //sum variable
int psq = 0; //counter for perfect squares
double avg = 0;
for(num = 101; num <= 149; num += 2){
sqroot = Math.sqrt(num);
if(sqroot*sqroot == num){ //Condition to find perfect squares
psq += 1; //counting perfect squares
sumPsq = sumPsq + num; //Find the sum of all the perfect squares
System.out.println(num); //Print out the perfect squares
}
}
avg = 1.0 * sumPsq/psq;
System.out.println(avg);
}
}
这只是整个作业中的一部分代码,因此如果您需要更多代码,我非常愿意提供。谢谢!
完全平方数是可以表示为两个相等整数的乘积的数字,因此它必须是 sqrt 之后的 int。如果您执行 sqroot*sqroot == num
,您只是在检查 sqrt 是否正常工作。由于 this 一些数字不会通过检查,但通常,您会得到比您想要的更多的数字。
所以您需要做的只是检查 sqrt 之后的结果是否为 int:
if (sqrootd % 1 == 0) { ... }
您可以做的优化是在 sqrt 之前检查数字是否为整数。
除此之外,你的代码对我来说还不错
检查平方根是否为整数的最佳方法您需要满足以下条件
if ((sqroot - Math.floor(sqroot)) == 0){
而不是
if(sqroot*sqroot == num){
Math.sqrt() 方法求给定数的平方根,floor() 方法求小于或等于参数 (这里的平方根值由 sqrt() 方法返回)并且等于一个数学整数。
然后我们计算这两者之间的差值来检查差值是否为零。对于完美的平方数,此差异始终为零。原因是:完全平方数的平方根是整数。
我使用以下数学公式找到完美的平方:
1 + 3 + 5 + 7 .... = n^2
例如:1 + 3 + 5 = 9 = 3 ^ 2
和示例代码:
int i = 1;
while (num > 0) {
num = num - i;
i = i + 2;
}
return num == 0;
所以我想找出一组数字中的完美平方。我声明了必要的变量,添加了一个 for 循环,添加了一个 sqroot = Math.sqrt(num)
和一个打印方法来列出数字。我想不通的是如何让程序在数字范围内挑选出完美的正方形,并求出它们的平均值?
这是我正在为 class 完成的一项作业,我已经在这上面停留了一段时间。我也是 Java 的新手,如果这是一个愚蠢的问题,我深表歉意。代码如下:
public class Test {
public static void main(String[] args) {
int num;
double sqroot = 0;
int sumPsq = 0; //sum variable
int psq = 0; //counter for perfect squares
double avg = 0;
for(num = 101; num <= 149; num += 2){
sqroot = Math.sqrt(num);
if(sqroot*sqroot == num){ //Condition to find perfect squares
psq += 1; //counting perfect squares
sumPsq = sumPsq + num; //Find the sum of all the perfect squares
System.out.println(num); //Print out the perfect squares
}
}
avg = 1.0 * sumPsq/psq;
System.out.println(avg);
}
}
这只是整个作业中的一部分代码,因此如果您需要更多代码,我非常愿意提供。谢谢!
完全平方数是可以表示为两个相等整数的乘积的数字,因此它必须是 sqrt 之后的 int。如果您执行 sqroot*sqroot == num
,您只是在检查 sqrt 是否正常工作。由于 this 一些数字不会通过检查,但通常,您会得到比您想要的更多的数字。
所以您需要做的只是检查 sqrt 之后的结果是否为 int:
if (sqrootd % 1 == 0) { ... }
您可以做的优化是在 sqrt 之前检查数字是否为整数。 除此之外,你的代码对我来说还不错
检查平方根是否为整数的最佳方法您需要满足以下条件
if ((sqroot - Math.floor(sqroot)) == 0){
而不是
if(sqroot*sqroot == num){
Math.sqrt() 方法求给定数的平方根,floor() 方法求小于或等于参数 (这里的平方根值由 sqrt() 方法返回)并且等于一个数学整数。
然后我们计算这两者之间的差值来检查差值是否为零。对于完美的平方数,此差异始终为零。原因是:完全平方数的平方根是整数。
我使用以下数学公式找到完美的平方:
1 + 3 + 5 + 7 .... = n^2
例如:1 + 3 + 5 = 9 = 3 ^ 2
和示例代码:
int i = 1;
while (num > 0) {
num = num - i;
i = i + 2;
}
return num == 0;