2012-10-12 126 views
12

Este es un código para verificar si un número es cuadrado perfecto o no. ¿Por qué funciona?¿Cuadrado perfecto o no?

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

Respuesta

41

Debido a que todos los cuadrados perfectos son sumas de números impares consecutivos:

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

y así sucesivamente. Su programa intenta restar números impares consecutivos de n, y ver si cae a cero o se vuelve negativo.

que pueda tomar una prueba informal de este dibujando cuadrados con lados de {1,2,3,4,...} y observar que la construcción de un cuadrado k+1 de la plaza k requiere la adición de 2k+1 cuadrados de la unidad.

+0

Gracias :) Nunca supe esto. – Kaushal

+2

¡Respuesta impresionante! –

+4

no puedes aprender estas cosas en la escuela :) –

Cuestiones relacionadas