Как нарисовать спираль # только с циклами for/while и операторами if/else (без массивов), используя C

Поэтому я очень плохо знаком с C и мне интересно, как я мог бы создать следующую спиральную форму:

Это моя комическая попытка..

#include <stdio.h>
int main(void) {
    int size;
    int i,j;

    printf("Enter size: ");
    scanf("%d", &size);

    for (i = 0, j = 0; i < size - 4; i++, j+=2) {

        int row = 1;
        while (row <= size) {
            int column = 1; 
            while (column <= size) {

                if ((row == 1 + j && column > j && column < size - j)|| 
                    (row == size - (j) && column > j && column < size - j) || 
                    (column == size - (j) && row > j && row <= size - j) ||
                    (column == 1 + j && row > (2+j) && row < size - j)) {
                    printf("*");
                }

                else {
                    printf("-");
                }

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

        }
    }
    return 0;
}

Любая помощь будет принята с благодарностью!

1 ответ

Решение

Я наслаждался этой проблемой и столкнулся с некоторыми проблемами, подходящими с подходом. Тем не менее, достаточно возни с тем, что картина очевидна; вот результат:

#include <stdio.h>

#define BLANK  "  "
#define FILLED "# "

void spiral(int size) {
    int i, j;

    if (!(size & 1)) { size++; }

    int half = size / 2 + 1;

    /* top */

    for (i = 0; i < half; i++) {
        if (i & 1) {
            for (j = 0; j < size; j++) {
                if (!(j & 1) && (j < i - 1 || j >= size - i)) {
                    printf(FILLED);
                }
                else {
                    printf(BLANK);
                }
            }
        }
        else {
            for (j = 0; j < size; j++) {
                if ((j & 1) && (j < i - 1 || j >= size - i)) {
                    printf(BLANK);
                }
                else {
                    printf(FILLED);
                }
            }
        }

        puts("");
    }

    /* bottom half */

    for (; i < size; i++) {
        if (i & 1) {
            for (j = 0; j < size; j++) {
                if (!(j & 1) && (j < size - i || j > i)) {
                    printf(FILLED);
                }
                else {
                    printf(BLANK);
                }
            }
        }
        else {
            for (j = 0; j < size; j++) {
                if ((j & 1) && (j < size - i || j > i)) {
                    printf(BLANK);
                }
                else {
                    printf(FILLED);
                }
            }
        }

        puts("");
    }
}

int main() {
    int i;

    for (i = 1; i < 35; i += 2 ) {
        spiral(i);
        puts("\n");
    }

    return 0;
}

Выход:

# 


# # # 
    # 
# # # 


# # # # # 
        # 
# # #   # 
#       # 
# # # # # 


# # # # # # # 
            # 
# # # # #   # 
#       #   # 
#   # # #   # 
#           # 
# # # # # # # 


# # # # # # # # # 
                # 
# # # # # # #   # 
#           #   # 
#   # # #   #   # 
#   #       #   # 
#   # # # # #   # 
#               # 
# # # # # # # # # 


# # # # # # # # # # # 
                    # 
# # # # # # # # #   # 
#               #   # 
#   # # # # #   #   # 
#   #       #   #   # 
#   #   # # #   #   # 
#   #           #   # 
#   # # # # # # #   # 
#                   # 
# # # # # # # # # # # 


# # # # # # # # # # # # # 
                        # 
# # # # # # # # # # #   # 
#                   #   # 
#   # # # # # # #   #   # 
#   #           #   #   # 
#   #   # # #   #   #   # 
#   #   #       #   #   # 
#   #   # # # # #   #   # 
#   #               #   # 
#   # # # # # # # # #   # 
#                       # 
# # # # # # # # # # # # # 


# # # # # # # # # # # # # # # 
                            # 
# # # # # # # # # # # # #   # 
#                       #   # 
#   # # # # # # # # #   #   # 
#   #               #   #   # 
#   #   # # # # #   #   #   # 
#   #   #       #   #   #   # 
#   #   #   # # #   #   #   # 
#   #   #           #   #   # 
#   #   # # # # # # #   #   # 
#   #                   #   # 
#   # # # # # # # # # # #   # 
#                           # 
# # # # # # # # # # # # # # # 


# # # # # # # # # # # # # # # # # 
                                # 
# # # # # # # # # # # # # # #   # 
#                           #   # 
#   # # # # # # # # # # #   #   # 
#   #                   #   #   # 
#   #   # # # # # # #   #   #   # 
#   #   #           #   #   #   # 
#   #   #   # # #   #   #   #   # 
#   #   #   #       #   #   #   # 
#   #   #   # # # # #   #   #   # 
#   #   #               #   #   # 
#   #   # # # # # # # # #   #   # 
#   #                       #   # 
#   # # # # # # # # # # # # #   # 
#                               # 
# # # # # # # # # # # # # # # # # 


# # # # # # # # # # # # # # # # # # # 
                                    # 
# # # # # # # # # # # # # # # # #   # 
#                               #   # 
#   # # # # # # # # # # # # #   #   # 
#   #                       #   #   # 
#   #   # # # # # # # # #   #   #   # 
#   #   #               #   #   #   # 
#   #   #   # # # # #   #   #   #   # 
#   #   #   #       #   #   #   #   # 
#   #   #   #   # # #   #   #   #   # 
#   #   #   #           #   #   #   # 
#   #   #   # # # # # # #   #   #   # 
#   #   #                   #   #   # 
#   #   # # # # # # # # # # #   #   # 
#   #                           #   # 
#   # # # # # # # # # # # # # # #   # 
#                                   # 
# # # # # # # # # # # # # # # # # # # 


# # # # # # # # # # # # # # # # # # # # # 
                                        # 
# # # # # # # # # # # # # # # # # # #   # 
#                                   #   # 
#   # # # # # # # # # # # # # # #   #   # 
#   #                           #   #   # 
#   #   # # # # # # # # # # #   #   #   # 
#   #   #                   #   #   #   # 
#   #   #   # # # # # # #   #   #   #   # 
#   #   #   #           #   #   #   #   # 
#   #   #   #   # # #   #   #   #   #   # 
#   #   #   #   #       #   #   #   #   # 
#   #   #   #   # # # # #   #   #   #   # 
#   #   #   #               #   #   #   # 
#   #   #   # # # # # # # # #   #   #   # 
#   #   #                       #   #   # 
#   #   # # # # # # # # # # # # #   #   # 
#   #                               #   # 
#   # # # # # # # # # # # # # # # # #   # 
#                                       # 
# # # # # # # # # # # # # # # # # # # # # 


# # # # # # # # # # # # # # # # # # # # # # # 
                                            # 
# # # # # # # # # # # # # # # # # # # # #   # 
#                                       #   # 
#   # # # # # # # # # # # # # # # # #   #   # 
#   #                               #   #   # 
#   #   # # # # # # # # # # # # #   #   #   # 
#   #   #                       #   #   #   # 
#   #   #   # # # # # # # # #   #   #   #   # 
#   #   #   #               #   #   #   #   # 
#   #   #   #   # # # # #   #   #   #   #   # 
#   #   #   #   #       #   #   #   #   #   # 
#   #   #   #   #   # # #   #   #   #   #   # 
#   #   #   #   #           #   #   #   #   # 
#   #   #   #   # # # # # # #   #   #   #   # 
#   #   #   #                   #   #   #   # 
#   #   #   # # # # # # # # # # #   #   #   # 
#   #   #                           #   #   # 
#   #   # # # # # # # # # # # # # # #   #   # 
#   #                                   #   # 
#   # # # # # # # # # # # # # # # # # # #   # 
#                                           # 
# # # # # # # # # # # # # # # # # # # # # # # 


# # # # # # # # # # # # # # # # # # # # # # # # # 
                                                # 
# # # # # # # # # # # # # # # # # # # # # # #   # 
#                                           #   # 
#   # # # # # # # # # # # # # # # # # # #   #   # 
#   #                                   #   #   # 
#   #   # # # # # # # # # # # # # # #   #   #   # 
#   #   #                           #   #   #   # 
#   #   #   # # # # # # # # # # #   #   #   #   # 
#   #   #   #                   #   #   #   #   # 
#   #   #   #   # # # # # # #   #   #   #   #   # 
#   #   #   #   #           #   #   #   #   #   # 
#   #   #   #   #   # # #   #   #   #   #   #   # 
#   #   #   #   #   #       #   #   #   #   #   # 
#   #   #   #   #   # # # # #   #   #   #   #   # 
#   #   #   #   #               #   #   #   #   # 
#   #   #   #   # # # # # # # # #   #   #   #   # 
#   #   #   #                       #   #   #   # 
#   #   #   # # # # # # # # # # # # #   #   #   # 
#   #   #                               #   #   # 
#   #   # # # # # # # # # # # # # # # # #   #   # 
#   #                                       #   # 
#   # # # # # # # # # # # # # # # # # # # # #   # 
#                                               # 
# # # # # # # # # # # # # # # # # # # # # # # # # 


# # # # # # # # # # # # # # # # # # # # # # # # # # # 
                                                    # 
# # # # # # # # # # # # # # # # # # # # # # # # #   # 
#                                               #   # 
#   # # # # # # # # # # # # # # # # # # # # #   #   # 
#   #                                       #   #   # 
#   #   # # # # # # # # # # # # # # # # #   #   #   # 
#   #   #                               #   #   #   # 
#   #   #   # # # # # # # # # # # # #   #   #   #   # 
#   #   #   #                       #   #   #   #   # 
#   #   #   #   # # # # # # # # #   #   #   #   #   # 
#   #   #   #   #               #   #   #   #   #   # 
#   #   #   #   #   # # # # #   #   #   #   #   #   # 
#   #   #   #   #   #       #   #   #   #   #   #   # 
#   #   #   #   #   #   # # #   #   #   #   #   #   # 
#   #   #   #   #   #           #   #   #   #   #   # 
#   #   #   #   #   # # # # # # #   #   #   #   #   # 
#   #   #   #   #                   #   #   #   #   # 
#   #   #   #   # # # # # # # # # # #   #   #   #   # 
#   #   #   #                           #   #   #   # 
#   #   #   # # # # # # # # # # # # # # #   #   #   # 
#   #   #                                   #   #   # 
#   #   # # # # # # # # # # # # # # # # # # #   #   # 
#   #                                           #   # 
#   # # # # # # # # # # # # # # # # # # # # # # #   # 
#                                                   # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # 


# # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
                                                        # 
# # # # # # # # # # # # # # # # # # # # # # # # # # #   # 
#                                                   #   # 
#   # # # # # # # # # # # # # # # # # # # # # # #   #   # 
#   #                                           #   #   # 
#   #   # # # # # # # # # # # # # # # # # # #   #   #   # 
#   #   #                                   #   #   #   # 
#   #   #   # # # # # # # # # # # # # # #   #   #   #   # 
#   #   #   #                           #   #   #   #   # 
#   #   #   #   # # # # # # # # # # #   #   #   #   #   # 
#   #   #   #   #                   #   #   #   #   #   # 
#   #   #   #   #   # # # # # # #   #   #   #   #   #   # 
#   #   #   #   #   #           #   #   #   #   #   #   # 
#   #   #   #   #   #   # # #   #   #   #   #   #   #   # 
#   #   #   #   #   #   #       #   #   #   #   #   #   # 
#   #   #   #   #   #   # # # # #   #   #   #   #   #   # 
#   #   #   #   #   #               #   #   #   #   #   # 
#   #   #   #   #   # # # # # # # # #   #   #   #   #   # 
#   #   #   #   #                       #   #   #   #   # 
#   #   #   #   # # # # # # # # # # # # #   #   #   #   # 
#   #   #   #                               #   #   #   # 
#   #   #   # # # # # # # # # # # # # # # # #   #   #   # 
#   #   #                                       #   #   # 
#   #   # # # # # # # # # # # # # # # # # # # # #   #   # 
#   #                                               #   # 
#   # # # # # # # # # # # # # # # # # # # # # # # # #   # 
#                                                       # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # 


# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
                                                            # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # #   # 
#                                                       #   # 
#   # # # # # # # # # # # # # # # # # # # # # # # # #   #   # 
#   #                                               #   #   # 
#   #   # # # # # # # # # # # # # # # # # # # # #   #   #   # 
#   #   #                                       #   #   #   # 
#   #   #   # # # # # # # # # # # # # # # # #   #   #   #   # 
#   #   #   #                               #   #   #   #   # 
#   #   #   #   # # # # # # # # # # # # #   #   #   #   #   # 
#   #   #   #   #                       #   #   #   #   #   # 
#   #   #   #   #   # # # # # # # # #   #   #   #   #   #   # 
#   #   #   #   #   #               #   #   #   #   #   #   # 
#   #   #   #   #   #   # # # # #   #   #   #   #   #   #   # 
#   #   #   #   #   #   #       #   #   #   #   #   #   #   # 
#   #   #   #   #   #   #   # # #   #   #   #   #   #   #   # 
#   #   #   #   #   #   #           #   #   #   #   #   #   # 
#   #   #   #   #   #   # # # # # # #   #   #   #   #   #   # 
#   #   #   #   #   #                   #   #   #   #   #   # 
#   #   #   #   #   # # # # # # # # # # #   #   #   #   #   # 
#   #   #   #   #                           #   #   #   #   # 
#   #   #   #   # # # # # # # # # # # # # # #   #   #   #   # 
#   #   #   #                                   #   #   #   # 
#   #   #   # # # # # # # # # # # # # # # # # # #   #   #   # 
#   #   #                                           #   #   # 
#   #   # # # # # # # # # # # # # # # # # # # # # # #   #   # 
#   #                                                   #   # 
#   # # # # # # # # # # # # # # # # # # # # # # # # # # #   # 
#                                                           # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 


# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
                                                                # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #   # 
#                                                           #   # 
#   # # # # # # # # # # # # # # # # # # # # # # # # # # #   #   # 
#   #                                                   #   #   # 
#   #   # # # # # # # # # # # # # # # # # # # # # # #   #   #   # 
#   #   #                                           #   #   #   # 
#   #   #   # # # # # # # # # # # # # # # # # # #   #   #   #   # 
#   #   #   #                                   #   #   #   #   # 
#   #   #   #   # # # # # # # # # # # # # # #   #   #   #   #   # 
#   #   #   #   #                           #   #   #   #   #   # 
#   #   #   #   #   # # # # # # # # # # #   #   #   #   #   #   # 
#   #   #   #   #   #                   #   #   #   #   #   #   # 
#   #   #   #   #   #   # # # # # # #   #   #   #   #   #   #   # 
#   #   #   #   #   #   #           #   #   #   #   #   #   #   # 
#   #   #   #   #   #   #   # # #   #   #   #   #   #   #   #   # 
#   #   #   #   #   #   #   #       #   #   #   #   #   #   #   # 
#   #   #   #   #   #   #   # # # # #   #   #   #   #   #   #   # 
#   #   #   #   #   #   #               #   #   #   #   #   #   # 
#   #   #   #   #   #   # # # # # # # # #   #   #   #   #   #   # 
#   #   #   #   #   #                       #   #   #   #   #   # 
#   #   #   #   #   # # # # # # # # # # # # #   #   #   #   #   # 
#   #   #   #   #                               #   #   #   #   # 
#   #   #   #   # # # # # # # # # # # # # # # # #   #   #   #   # 
#   #   #   #                                       #   #   #   # 
#   #   #   # # # # # # # # # # # # # # # # # # # # #   #   #   # 
#   #   #                                               #   #   # 
#   #   # # # # # # # # # # # # # # # # # # # # # # # # #   #   # 
#   #                                                       #   # 
#   # # # # # # # # # # # # # # # # # # # # # # # # # # # # #   # 
#                                                               # 
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 

Объяснение:

Позволять i представляют текущий индекс строки и j представляют текущий индекс столбца.

Разделите проблему на две половины. Нижняя половина легче, потому что левая и правая половины симметричны, поэтому четные и нечетные строки печатают свой соответствующий шаблон на знаках чередующихся столбцов if j < size - i || j > i,

Верхняя половина немного сложнее: рисунок такой же, за исключением того, что левая сторона отстает от правой стороны на 1, что означает, что нам нужно вычесть 1 из левой стороны: if j < i - 1 || j >= size - i,

Обратите внимание, что этот код может использовать некоторую очистку для уменьшения повторения; Я оставил это подробным, чтобы было понятно, как это работает. Я также взял на себя смелость настроить символы для печати, потому что оригинал труднее для глаз - это легко настроить с помощью #defines или добавление параметров в функцию.

Вот репл.

Другие вопросы по тегам