完美的方块与否?

Kau*_*hal 12 algorithm perfect-square

这是一个代码,用于检查数字是否是完美的正方形.它为什么有效?

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

das*_*ght 44

因为所有完美的正方形都是连续奇数的总和:

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

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

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

  • @dasblinkenlight - 是的,我们可以通过绘制正方形轻松证明它..这是一个视频解释它https://www.youtube.com/watch?v=2gC5eVRatOQ (3认同)
  • 真棒的答案! (2认同)