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차원 배열을 동적 할당 합니다.
아까 받은 수가 0이 아닐 때까지 반복문을 돌면서
i<n보다 작다면 i를 1씩 증가시키며 반복문을 돕니다.
그 후 a=1이라고 선언을 해주었으므로, x의 값에 1씩 증가시켜 저장합니다.
그 후 배열에 저장한 후
n을 -1을 합니다.
그 후 y의 값이 증가해야하기 때문에 y도 변수 a를 사용하여 +1을 하고
모든 연산이 끝나고 반복문이 나왔을 때에는
a*=-1을 하여 감소를 합니다.
배열을 모두 알맞게 저장을 했으니 이제 맨 위에서 n의 값을 저장시킨 변수 n2를 사용하여
배열을 출력합니다.
마지막으로 동적 할당을 해체해줍니다.