Para resolver este problema, es preciso analizar como varían el número de espacios y asteriscos a imprimir con respecto al número de línea que se está imprimiendo.
Analizando la situación para un caso sencillo, se puede obtener la relación entre el número de espacios y asteriscos a imprimir y la línea que se está imprimiendo.
En este caso la relación del número de espacios parece evidente, es igual al número de línea menos uno.
En cuanto al número de asteriscos se puede calcular mediante la siguiente fórmula:
(Total de lineas X 2) - (número de espacios X 2) - 1
Para el caso del ejemplo resultará:
línea 1 - (3 X 2) - (0 X 2) - 1 = 6 - 0 - 1 = 5
línea 2 - (3 X 2) - (1 X 2) - 1 = 6 - 2 - 1 = 3
línea 3 - (3 X 2) - (2 X 2) - 1 = 6 - 4 - 1 = 1
Aplicando estos conocimientos se obtiene el código que se puede ver a continuación.
Enlace a compilador web Codepad
http://codepad.org/fYOsqpfe
#include <stdio.h> #include <stdlib.h> int main() { int total_lineas = 10, nlinea = 1, nast = 0, nesp = 0; printf ("Piramide de asteriscos:\n"); printf ("Indique cuantos pisos desea que tenga la piramide (Maximo 40 pisos): "); scanf("%d", &total_lineas); while (nlinea <= total_lineas) { while (nesp < (nlinea - 1)) { printf(" "); nesp++; } while (nast < ((total_lineas * 2) - (nesp * 2) - 1)) { printf("*"); nast++; } nesp = 0; nast = 0; nlinea++; printf("\n"); } return 0; }