如何从 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() 方法返回)并且等于一个数学整数。

然后我们计算这两者之间的差值来检查差值是否为零。对于完美的平方数,此差异始终为零。原因是:完全平方数的平方根是整数。

reference

我使用以下数学公式找到完美的平方:

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;