Вот как я решил версию этой проблемы с обеими сторонами, но вы можете заставить ее работать только с одной, просто используйте 2 цикла for вместо трех.
Если нам нужно взять число от 1 до 8 в качестве входных данных, которое является высотой нашей пирамиды, мы можем использовать один цикл for для вывода каждой строки пирамиды.
Внутри этого цикла нам понадобятся еще два цикла for, которые печатают пробелы и хэши.
А так как нам нужна и другая сторона пирамиды, мы будем использовать всего три петли внутри нашего основного цикла.
Почему три петли, а не четыре? Потому что на самом деле нам не нужно печатать место на правой стороне пирамиды.
Помимо переменной высоты нам нужна еще одна, которая будет работать как счетчик, поскольку мы не можем манипулировать нашей переменной высоты.
Эти циклы for работают в противоположном направлении, то есть чем больше у нас пробелов, тем меньше хэшей мы печатаем, и наоборот.
Итак, окончательное решение CS50 Pset 1 Mario More выглядит именно так:
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int height;
do {
height = get_int("Height: ");
}
while (height < 1 || height > 8);
if (height > 0 || height < 9) {
int counter = 0;
for (int row=0; row<height; row++) {
if (counter != height) {
for (int spaces = (height-1) - counter; spaces > 0; spaces--) {
printf(" ");
}
for (int hashes = 0; hashes <= counter; hashes++) {
printf("#");
}
//ignore this block below if you want only one side
printf(" ");
for (int hashes = 0; hashes <= counter; hashes++) {
printf("#");
}
//##################################################
printf("\n");
counter++;
}
}
}
}
Я даже сделал сообщение в блоге об этом, так как Мне нравится делать заметки на случай, если вам понадобится дополнительная информация.
person
Goran Spasojevic
schedule
02.08.2019