2012-10-12 16 views
12

To jest kod, aby sprawdzić, czy numer jest idealny kwadratowy, czy nie. Dlaczego to działa?Idealny kwadrat, czy nie?

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

Odpowiedz

41

Ponieważ wszystkie doskonałe kwadraty są sumami kolejnych numerach parzystych

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

i tak dalej. Twój program próbuje odjąć kolejne nieparzyste liczby od n i sprawdzić, czy spadnie do zera, czy pójdzie ujemnie.

Można dokonać nieformalne potwierdzenie tego przez rysowanie kwadratów o bokach {1,2,3,4,...} i obserwować, że budowa kwadrat k+1 od placu k wymaga dodania 2k+1 jednostkowych kwadratów.

+0

Dzięki :) Nigdy o tym nie wiedziałem. – Kaushal

+2

Niesamowita odpowiedź! –

+4

Nie możesz uczyć się tych rzeczy w szkole :) –

Powiązane problemy