Хорошая попытка; однако вам нужно будет напечатать серию пробелов перед вашими шагами, чтобы произвести выравнивание по правому краю. Это не обязательно очевидно, поскольку пробелы невидимы (и не нужны для выровненного по левому краю треугольника).
Формула для количества печатаемых пробелов равна height - row_number - 1
, а формула для количества печатаемых символов шага - row_number + 1
(или column_number <= row_number
). Я рекомендую поэкспериментировать с этими числами и попытаться создать различные шаблоны, которые помогут вам понять. Причина дополнительного смещения -1
/ +1
состоит в том, чтобы не печатать пустую линию над треугольником.
Чтобы ответить на ваш вопрос о вашем условии завершения второго цикла, оно будет ложным только после того, как вы напечатаете количество символов шага меньше номера строки, в то время как первый цикл обратен этому.
#include <stdio.h>
#include <cs50.h>
int main() {
int height = get_int("How tall are the pyramids: ");
for (int i = 0; i < height; i++) {
for (int j = 0; j < height - i - 1; j++) {
printf(" ");
}
for (int j = 0; j <= i; j++) {
printf("#");
}
printf("\n");
}
}
Выход (высота = 10):
#
##
###
####
#####
######
#######
########
#########
##########
Попробуйте!