12

これは、数値が完全な正方形であるかどうかを確認するためのコードです。なぜそれが機能するのですか?

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

1 に答える 1

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

于 2012-10-12T15:45:40.460 に答える