layer7

Layer 7 07 과제 - 달팽이 배열

건_빵 2019. 4. 10. 00:23
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
   int n;
   printf("Input: "); scanf("%d", &n);
   int n2=n; //변수를 하나 더 만들어서 n을 --시켜도 괜찮다.
   //동적 할당
   int **arr = (int**)malloc(sizeof(int*)*n); //이차원 배열 동적 할당 
   for (int i = 0; i < n; i++)
   {
      arr[i] = (int*)malloc(sizeof(int)*n);
   }
  
   //달팽이 배열로 만드는 과정 
   int x = -1, y = 0;
   int count = 0;
   int a = 1; //증감할 값 
   
   while (n!=0)
   {
      for (int i = 0; i < n; i++)
      {
         x += a;
         arr[y][x] = ++count;
      }
      n--;
      for (int i = 0; i < n; i++)
      {
         y += a;
         arr[y][x] = ++count;
      }
      a *= -1;
   }
   //모든 배열 요소를 0으로 초기화 한다. 
   for (int i = 0; i < n2; i++)
   {
      for (int j = 0; j < n2; j++)
      {
         printf("%02d ",arr[i][j]);
      }
      printf("\n");
   }
   //동적 할당 해제
   for (int i = 0; i < n2; i++)
                                                                                     {
      free(arr[i]);
   }
   return 0;
}

 

숫자를 한 개 입력을 받은 후 달팽이집처럼 배열을 출력하는 프로그램 입니다.

실행 결과 1
실행 결과 2

먼저, 얼마의 크기로 배열을 만들 것인지 숫자 1개를 입력 받습니다.

 

이중 포인터를 만든 후 2차원 배열을 동적 할당 합니다.

아까 받은 수가 0이 아닐 때까지 반복문을 돌면서

i<n보다 작다면 i를 1씩 증가시키며 반복문을 돕니다.

그 후 a=1이라고 선언을 해주었으므로,  x의 값에 1씩 증가시켜 저장합니다.

그 후 배열에 저장한 후

n을 -1을 합니다.

그 후 y의 값이 증가해야하기 때문에 y도 변수 a를 사용하여 +1을 하고

모든 연산이 끝나고 반복문이 나왔을 때에는

a*=-1을 하여 감소를 합니다.

 

 

배열을 모두 알맞게 저장을 했으니 이제 맨 위에서 n의 값을 저장시킨 변수 n2를 사용하여

배열을 출력합니다.

 

마지막으로 동적 할당을 해체해줍니다.