【问题标题】:How do I find perfect square from a set of numbers in Java?如何从 Java 中的一组数字中找到完美平方?
【发布时间】:2020-01-24 22:56:43
【问题描述】:

所以我试图找出一组数字中的完美正方形。我声明了必要的变量,添加了一个 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);
    }

}

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

【问题讨论】:

  • 您可能应该将找到的完美方格放在一个列表中,或者将它们相加并记录有多少。
  • 您的代码似乎完全按照您所说的去做,尽管这确实不是测试完美平方的最佳方法......
  • 让我们开始分析问题:完美正方形的确切定义是什么?
  • @RoddyoftheFrozenPeas 如果这段代码得到了正确的答案,那只是偶然,因为 OP 从不四舍五入平方根。

标签: java perfect-square


【解决方案1】:

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

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

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

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

【讨论】:

  • 什么是variable
  • @RoddyoftheFrozenPeas 对不起,是 sqroot
  • @CarlosHeuberger 我得到了反对票和赞成票,所以我猜一定有什么问题
  • 没有赞成票,没有反对票 - 可能它已被撤销,也就是说,它一定是出了点问题(我评论中的笑脸应该表明它没有那么严重[: -))
  • 一定是那样
【解决方案2】:

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

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

而不是

if(sqroot*sqroot == num){

Math.sqrt() 方法求给定数的平方根,而 floor() 方法求小于或等于参数(此处为平方根值)的最大(最接近正无穷大)浮点值由 sqrt() 方法返回)并且等于一个数学整数。

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

reference

【讨论】:

  • 我认为您解释了round() 的功能而不是floor() - 它不是“最接近的整数”,而是小于或等于给定数字的最大整数
  • @CarlosHeuberger 感谢您指出这一点。你说的对。我会更新答案
【解决方案3】:

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

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-12-19
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    相关资源
    最近更新 更多