这是一个检查数字是否为完全平方的代码。为什么有效?

static bool IsSquare(int n)
{
    int i = 1;
    for (; ; )
    {
        if (n < 0)
            return false;
        if (n == 0)
            return true;
        n -= i;
        i += 2;
    }
}

最佳答案

因为所有完全平方数都是连续奇数之和:

  • 1 = 1
  • 4 = 1 + 3
  • 9 = 1 + 3 + 5
  • 16 = 1 + 3 + 5 + 7

  • 等等。您的程序尝试从 n 中减去连续的奇数,然后查看它是否降为零或变为负数。

    您可以通过绘制边为 {1,2,3,4,...} 的正方形来对此进行非正式证明,并观察到从正方形 k+1 构建正方形 k 需要添加 2k+1 单位。

    关于algorithm - 完美的正方形与否?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12862637/

    10-14 23:49