0

所以我试图找出一组数字中的完美正方形。我声明了必要的变量,添加了一个 for 循环,添加了sqroot = Math.sqrt(num)一个打印方法来列出数字。我想不通的是如何让程序在数字范围内挑选出完美的正方形,并找到它们的平均值?

这是我正在为一堂课做的一项作业,我已经坚持了一段时间了。如果这是一个愚蠢的问题,我对 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);
    }

}

这只是整个作业中的一部分代码,所以如果您需要更多代码,那么我非常愿意提供它。谢谢!

4

3 回答 3

3

完美平方是可以表示为两个相等整数的乘积的数字,因此它必须是 sqrt 之后的 int。如果您这样做,sqroot*sqroot == num您只是在检查 sqrt 是否正常工作。由于这个原因,一些数字不会通过检查,但通常,你会得到比你想要的更多的数字。

所以你需要做的只是检查 sqrt 之后的结果是一个 int:

if (sqrootd % 1 == 0) { ... }

您可以做的优化是在 sqrt 之前检查数字是否为整数。除此之外,您的代码对我来说看起来不错

于 2019-09-24T19:13:39.913 回答
1

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

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;
于 2021-10-15T05:19:25.347 回答
0

检查平方根是否为整数的最佳方法,您将需要以下条件

if ((sqroot - Math.floor(sqroot)) == 0){

代替

if(sqroot*sqroot == num){

Math.sqrt() 方法找到给定数字的平方根,而 floor() 方法找到小于或等于参数的最大(最接近正无穷大)浮点值(这里是 sqrt 返回的平方根值() 方法)并且等于一个数学整数。

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

参考

于 2019-09-24T19:15:21.037 回答