完美的方块与否?

时间:2012-10-12 15:43:37

标签: 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;
    }
}

1 个答案:

答案 0 :(得分: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单位正方形。