2012-10-12 6 views
12

数字が正方形かどうかを確認するコードです。それはなぜ機能するのですか?パーフェクトスクエアかどうか?

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

答えて

41

全て完全四角は連続奇数の和であるので:

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

などとなる。あなたのプログラムは、連続した奇数をnから差し引いてゼロに落ちるか否かを調べます。

あなたは{1,2,3,4,...}の側面と正方形を描画することによって、この非公式の証明を行い、四角kから平方k+1を構築すること2k+1単位正方形を追加する必要があることを観察することができます。

+0

ありがとうございました。私はこれについて知りませんでした。 – Kaushal

+2

驚くばかりの答え! –

+4

あなたは学校でこれらのことを学ぶことはできません:) –

関連する問題