En primer lugar, debo agradecer al OP por hacer esta pregunta aquí en Quora. He aprendido mucho en el proceso de escribir este código. Esta es una de las preguntas más difíciles que he respondido aquí en Quora. En realidad, me llevó alrededor de 1 semana codificar este patrón correctamente 😛
La espiral de Ulam es básicamente esto …
- ¿Cuál es la complejidad temporal de la ecuación T (n) = T (\ sqrt {n}) + n; n> 2 T (n) = C; n = 2?
- ¿Por qué es tan difícil encontrar documentaciones útiles y completas sobre métodos criptográficos en Internet?
- ¿Cuál es su consejo para alguien que comienza su doctorado en informática teórica?
- Dado un conjunto de n rectángulos alineados en el eje en el plano, ¿qué tan grande es el subconjunto más grande de estos rectángulos que contienen un punto común en O (n ^ 3) y luego en el orden O (nlogn)?
- Soy muy malo en matemáticas, pero quiero ser programador. ¿Debo solicitar la programación?
Nota: si lo piensa, se dará cuenta de que el número de columnas para obtener este patrón siempre tendrá que ser un Número impar.
Tenga en cuenta que escribí este código en C ++ . Entonces, así es como va mi código …
#include
usando el espacio de nombres estándar;
int main ()
{
int n;
cout << "Ingrese el número de filas (un número impar):";
cin >> n;
int tl [n / 2], k = n, tr [n / 2];
si (n% 2! = 0)
{
para (int i = 0; i <(n + 1) / 2; i ++)
{
tl [i] = k * k-2 * (k-1);
tr [n / 2-i-1] = tl [i] -k;
para (int c = 1; c <i + 1; c ++)
{
int z = tl [c-1];
cout << z + i-c + 1 << "";
}
cout << tl [i] << "";
int p = tl [i] -1;
para (int j = 0; j <n-2 * i-1; j ++)
{
cout << p << "";
pags-;
}
k- = 2;
para (int m = 0; m <i; m ++)
{
cout << tr [n / 2-i + m] << "";
tr [n / 2-i + m] -;
}
cout << endl;
}
int bl [n / 2], br [n / 2], w = n;
para (int i = 0; i <n / 2; i ++)
{
bl [i] = w * w-2 * (w-1) + 2 * (w / 2);
br [n / 2-i-1] = w * w;
w = w-2;
}
para (int i = 0; i <n / 2; i ++)
{
int x = n / 2-1-i;
para (int j = 0; j <n / 2-i; j ++)
{
cout << bl [j] -x << "";
X-;
}
para (int a = 0; a <2 * (i + 1); a ++)
{
bl [n / 2-i-1] ++;
cout << bl [n / 2-i-1] << "";
}
para (int c = 0; c <n / 2-i-1; c ++)
{
int h = br [c + i] + c + 1;
cout << h << "";
}
cout << endl;
}
}
más
{
cout << "Abortado !!! \ nTío, debes ingresar un número impar: P";
}
devuelve 0;
}
Sé muy poco de C ++. No conozco formas o funciones avanzadas para acortar este código. Me disculpo por lo mismo.
Aquí hay algunas fotos de diferentes casos de prueba …
Por cierto, esto es lo que sucederá si intentas ingresar un número par …
Nota importante: Sé que las líneas de mi salida no están alineadas correctamente. En C ++, este problema surge porque podemos tener números que van desde un solo dígito hasta 3 dígitos en la misma línea. No digo que sea imposible hacerlo, pero ocupará más líneas de códigos. Y no estoy de humor para escribir más código para hacer que este programa sea aún más largo 😛