(C언어) 2차원 배열, 달팽이 모양의 배열

첫째, 왼쪽 위에서 아래로 시작하여 외부에서 내부로 달팽이 모양의 시퀀스 형태의 C 언어 코드입니다.

배열 크기는 코드 상단에서 N으로 정의됩니다.

#include <stdio.h>

#define ROW 7
#define COL 7

int main() {
    int arr(ROW)(COL);
    int n = 1;
    int row_start = 0, row_end = ROW - 1, col_start = 0, col_end = COL - 1;

    while (row_start <= row_end && col_start <= col_end) {
        // 첫 번째 열부터 마지막 열까지
        for (int i = row_start; i <= row_end; i++) {
            arr(i)(col_start) = n++;
        }
        col_start++;

        // 마지막 행부터 첫 번째 행까지
        for (int i = col_start; i <= col_end; i++) {
            arr(row_end)(i) = n++;
        }
        row_end--;

        // 마지막 열부터 첫 번째 열까지
        for (int i = row_end; i >= row_start; i--) {
            arr(i)(col_end) = n++;
        }
        col_end--;

        // 첫 번째 행부터 마지막 행까지
        for (int i = col_end; i >= col_start; i--) {
            arr(row_start)(i) = n++;
        }
        row_start++;
    }

    // 출력
    for (int i = 0; i < ROW; i++) {
        for (int j = 0; j < COL; j++) {
            printf("%3d", arr(i)(j));
        }
        printf("\n");
    }

    return 0;
}


달팽이 시퀀스

다음 코드는 바깥쪽에서 안쪽으로, 왼쪽 위에서 오른쪽으로(시계 방향) 달팽이 모양의 시퀀스를 시작하는 C 언어 코드입니다.

배열 크기는 코드 상단에서 N으로 정의됩니다.

#include <stdio.h>

#define ROW 7
#define COL 7

int main() {
    int arr(ROW)(COL);
    int n = 1;
    int row_start = 0;
    int row_end = ROW - 1;
    int col_start = 0;
    int col_end = COL - 1;

    while (row_start <= row_end && col_start <= col_end) {
        // 첫 번째 열부터 마지막 열까지
        for (int i = col_start; i <= col_end; i++) {
            arr(row_start)(i) = n++;
        }
        row_start++;

        // 첫 번째 행부터 마지막 행까지
        for (int i = row_start; i <= row_end; i++) {
            arr(i)(col_end) = n++;
        }
        col_end--;

        // 마지막 열부터 첫 번째 열까지
        for (int i = col_end; i >= col_start; i--) {
            arr(row_end)(i) = n++;
        }
        row_end--;

        // 마지막 행부터 첫 번째 행까지
        for (int i = row_end; i >= row_start; i--) {
            arr(i)(col_start) = n++;
        }
        col_start++;
    }

    // 출력
    for (int i = 0; i < ROW; i++) {
        for (int j = 0; j < COL; j++) {
            printf("%3d", arr(i)(j));
        }
        printf("\n");
    }

    return 0;
}


달팽이 순서: 시계 방향

위의 코드를 적절하게 수정하면 원하는 방향으로 숫자를 입력할 수 있습니다.

출력의 모양을 변경하지 마십시오.

반응형

다음과 같이 표현할 수도 있습니다.

#include <stdio.h>
#define n   7

int main() 
{
    int arr(n)(n);

    int i, j, k = 1;
    for (i = 0; i < n; i++) {
        for (j = i; j < n - i; j++) {
            arr(i)(j) = k++;
        }
        for (j = i + 1; j < n - i; j++) {
            arr(j)(n - i - 1) = k++;
        }
        for (j = n - i - 2; j >= i; j--) {
            arr(n - i - 1)(j) = k++;
        }
        for (j = n - i - 2; j > i; j--) {
            arr(j)(i) = k++;
        }
    }

    // 출력
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%3d", arr(i)(j));
        }
        printf("\n");
    }

    return 0;
}