Fácil–medio · Bucles anidados
Pirámide de asteriscos
Imprime una pirámide centrada de asteriscos con N filas. Los patrones impresos hacen que los bucles dejen de ser abstractos — un off-by-one se ve.
En una fraseLa fila i son N−i espacios seguidos de 2i−1 asteriscos, con dos bucles anidados: los espacios iniciales forman parte de la salida esperada, así que una pirámide pegada a la izquierda se rechaza.
El problema
Entrada: un entero N (1 ≤ N ≤ 20).
Salida: una pirámide de N filas. La fila i (contando desde 1) lleva N − i espacios iniciales seguidos de 2i − 1 asteriscos.
Ejemplos:
Para N = 3:
* *** *****
Fila 1: 2 espacios + 1 asterisco. Fila 2: 1 espacio + 3. Fila 3: 0 espacios + 5. Los espacios cuentan — el juez los compara.
Tu solución
Entrada personalizada para «Ejecutar mi entrada»
La corrección corre en tu navegador contra pruebas ocultas. Un bucle infinito se corta a los 3 segundos — aun así, asegúrate de que todo bucle tenga salida. Tu código se guarda solo mientras escribes.
¿Atascado? Pistas
Pista 1 — piensa en filas, luego en columnas
Un for exterior por las filas i = 1…N. Por fila, dos bucles interiores: primero n - i espacios, luego 2*i - 1 asteriscos, y al final cout << endl;. Bucles anidados = cada nivel se ocupa de una sola cosa.
Pista 2 — depura con N=1 y N=2
Corre casos diminutos primero. Si N=1 sale bien pero N=2 queda torcido, el conteo de espacios va desfasado en uno — las fórmulas n - i y 2*i - 1 son todo el problema; cuéntalas del ejemplo, no las adivines.
Solución (¡inténtalo primero!)
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int s = 0; s < n - i; s++) cout << " ";
for (int k = 0; k < 2 * i - 1; k++) cout << "*";
cout << endl;
}
return 0;
}
Cuando pase, haz remixes: triángulo rectángulo (quita el bucle de espacios), pirámide invertida (cuenta i hacia abajo), pirámide hueca (if/else dentro del bucle interior, asteriscos solo en los bordes). Los mismos tres esqueletos cubren la mitad de los problemas de patrones de internet. Siguiente: Factorial.
Análisis profundo
Por qué funciona
Dos contadores por fila —espacios y luego asteriscos— enseñan la regla de que los bucles anidados son uno por dimensión de la salida.
El coste
O(n²) caracteres impresos. La salida ya es cuadrática: ningún algoritmo puede evitarlo.
Dónde falla
- Los espacios iniciales se comparan byte a byte: uno de más y la fila está mal. Los finales los recorta este juez (los OJ reales, normalmente no).
- Memorizar
2*i - 1funciona hasta que cambias la base. Deduce la cuenta a partir del número de fila.
Siguiente paso
Anidar con salida numérica: Tabla de multiplicar.
Dos cosas para recordar
- Un bucle por cada dimensión de la salida.
- Los espacios iniciales cuentan; los finales fallan.
🐞 Esta versión falla: ábrela y pruébala
Un espacio de más al principio de cada fila
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i + 1; j++) cout << " ";
for (int j = 1; j <= 2 * i - 1; j++) cout << "*";
cout << endl;
}
return 0;
}