Member 13943116 Ответов: 3

Как я могу печатать коробки внутри коробок в C, используя только циклы while (без массивов)


Нужна некоторая интуиция о правильной логике, необходимой для решения этой проблемы только с использованием циклов while и операторов if


Мне нужно иметь возможность печатать коробки внутри коробок, как указано в названии подобный этому.

Что я уже пробовал:

#include <stdio.h>


int main(void) {

    int boxes;
        
    printf("How many boxes: ");
    scanf("%d", &boxes);
    
    
    int boxSide = boxes *3 + (boxes - 1);
    int i;
    int j;



        int row = 0;   

            while (row < boxSide) {
            
                int column = 0;
                
                while (column < boxSide) {

                    if ((row % 2 == 0) && (column % 2 ==0))  {
                    
                      printf("#");
                    
                    }

                    else if (row == 0 || row == boxSide-1 || column == 0 || column == boxSide-1) {
                        printf("#");
                    }
                    
                    else if ((column == boxSide/2) && (row % 2 == 0)) {
                        printf("#");
                    }

                    else if ((row == boxSide/2) && (column % 2 == 0)) {
                        printf("#");
                    }                                     
                    
                    else {
                        printf(" ");
                    }

                column++;
                    
                }
   
                row++;
                printf("\n");
                
            }
 
    return 0;
}

3 Ответов

Рейтинг:
2

Gerry Schmitz

Используйте "лучевое литье".

Вы можете рассчитать координаты и "границы" каждой коробки.

Затем вы перебираете каждую "ячейку" (каждый col, по строке) и видите, в какую коробку она "попадает"; она может попасть только в одну и только в одну, если исходные "вычисления коробки" верны.

(Первый ряд ячеек будет все "хит" внешний ограничивающий прямоугольник; затем внешний самый 2; со следующим внутренним прямоугольником сверху хит и т. д.)

"Цвет" попадает в ячейки с символом для этого поля.


Рейтинг:
2

Patrice T

Считать это:

#######   3333333
#     #   3     3
# ### #   3 111 3
# # # #   3 1 1 3
# ### #   3 111 3
#     #   3     3
#######   3333333

Вы знаете, является ли позиция границей коробки или нет, в зависимости от расстояния до центра коробки.


Рейтинг:
0

OriginalGriff

Остановитесь и подумайте об этом: нарисуйте сами коробки и посмотрите, как они построены.

#####    11111
#####    12221
## ##    12 21
#####    12221
#####    11111
Это две коробки
#######    1111111
#######    1222221
#######    1233321
### ###    123 321
#######    1233321
#######    1222221
#######    1111111
Это три коробки
Есть ли смысл до сих пор?
Таким образом, вам нужно два цикла while: внешний охватывает строки и должен выполняться 2n + 1 раз, где n это количество коробок. (Потому что у вас есть 2 "половинки" для рисования и один средний ряд.)
Внутренняя часть покрывает колонны, а также бежит 2n + 1 раз по той же причине.
В боковых обеих петлях, если вы не находитесь прямо в центре, выведите "#". Если вы находитесь в центре, выведите " ".

Довольно легко, если подумать ... но это твое домашнее задание, так что я не буду его кодировать для тебя!


Rick York

Однако это не совсем то же самое, что коробки на изображении. На изображении коробки имеют пробелы по горизонтали и вертикали между каждым из них, и это значительно влияет на алгоритм.

OriginalGriff

Это просто изменение в цифрах, плюс немного больше размышлений... :смеяться:
Я не хожу по случайным ссылкам, чтобы посмотреть домашнее задание ... "ты хочешь, чтобы я помог, облегчи это мне, а не тебе" - вот мой девиз!