본문 바로가기

C 언어/임베디드 C

달팽이 배열

[달팽이 배열]

N*N 정방행렬에 달팽이 집과 같은 순서로 데이터를 저장한다.

달팽이 배열은 배열의 크기나 시계 방향 또는 반시계 방향 어디든지 상관 없으나, 문제에서는 외부에서 중심까지 시계 방향으로 회전시키는 경우를 다룬다.

 

 

4X4 달팽이 배열을 분석하시오.

 

 

5X5 달팽이 배열을 분석하시오.

  

 

 

 

1.  4X4 정방행렬에 달팽이 집과 같은 순서로 숫자 1부터 차례대로 기억시킨 후, 그 값을 출력하시오.

 

 #include<stdio.h>

int main()

{

             int x;

             int i = 0;

             int j = 0;

             int val = 0;

             int arr[4][4];

 

             // 달팽이 모양으로 입력

             for(x=0; x<(4+1)/2; x++)

             {

                           for(i=x, j=x; j<4-x; ++j) // 왼쪽 -> 오른쪽

                           {

                                        arr[i][j] = ++val;

                           }

                           for(i=x+1,j=4-x-1;i<4-x;++i) // 위 아래

                           {

                                        arr[i][j] = ++val;

                           }

                           for(i=4-x-1, j=4-x-2; j>=x; --j) // 오른쪽 -> 왼쪽

                           {

                                        arr[i][j] = ++val;

                           }

                           for(i=4-x-2, j=x; i>x ;--i) //아래 ->

                           {

                                        arr[i][j] = ++val;

                           }

             }

             for(i=0; i<4; i++)

             {

                           for(j=0; j<4; j++)

                           {

                                        printf("%3d", arr[i][j]);

                           }

                           printf("\n");

             }

             return 0;

}

 

 

#include<stdio.h>

int main()

{

             int x;

             int i = 0;

             int j = 0;

             int val = 0;

             int arr[4][4];

 

             // 달팽이 모양으로 입력

             for(x=0; x<(4+1)/2; x++)

             {

                           for(i=x, j=x; j<4-x; ++j) // 왼쪽 -> 오른쪽

                           {

                                        arr[i][j] = ++val;

                           }

                           for(i++,j--;i<4-x;++i) // 위 아래

                           {

                                        arr[i][j] = ++val;

                           }

                           for(--i,--j; j>=x; --j) // 오른쪽 -> 왼쪽

                           {

                                        arr[i][j] = ++val;

                           }

                           for(--i,++j;i>x;--i) //아래 ->

                           {

                                        arr[i][j] = ++val;

                           }

             }

             for(i=0; i<4; i++)

             {

                           for(j=0; j<4; j++)

                           {

                                        printf("%3d", arr[i][j]);

                           }

                           printf("\n");

             }

             return 0;

}

 



2.  5X5
정방행렬에 달팽이 집과 같은 순서로 숫자 1부터 차례대로 기억시킨 후, 그 값을 출력하시오.

 

#include<stdio.h>

int main()

{

             int x;

             int i = 0;

             int j = 0;

             int val = 0;

             int arr[5][5];

 

             // 달팽이 모양으로 입력

             for(x=0; x<(5+1)/2; x++)

             {

                           for(i=x, j=x; j<5-x; ++j) // 왼쪽 -> 오른쪽

                           {

                                        arr[i][j] = ++val;

                           }

                           for(i=x+1,j=5-x-1;i<5-x;++i) // 위 아래

                           {

                                        arr[i][j] = ++val;

                           }

                           for(i=5-x-1, j=5-x-2; j>=x; --j) // 오른쪽 -> 왼쪽

                           {

                                        arr[i][j] = ++val;

                           }

                           for(i=5-x-2, j=x; i>x ;--i) //아래 ->

                           {

                                        arr[i][j] = ++val;

                           }

             }

             for(i=0; i<5; i++)

             {

                           for(j=0; j<5; j++)

                           {

                                        printf("%3d", arr[i][j]);

                           }

                           printf("\n");

             }

             return 0;

}


'C 언어 > 임베디드 C' 카테고리의 다른 글

구조체를 사용한 파일 입출력  (0) 2011.06.29
malloc(), free()  (0) 2011.06.22
어셈블리 기본소스  (0) 2011.06.15
메모리 저장주소 보기 및 활용  (0) 2011.04.26
메모리내 주소 저장방식  (0) 2011.04.26