Skip to main content

열혈강의 C프로그래밍 – 도전! 프로그래밍 THREE – 2

숫자 n을 입력받아 [n]X[n]배열에 바깥쪽부터 안쪽으로 오른쪽 나선형 방향으로 숫자를 입력.

#include <stdio.h>

void snail(int (*s)[50], int n);
void arrprint(int (*s)[50], int n);

int main(void)
{
int arr[50][50];
int val;

printf(”한 개의 정수 입력 : ”);
scanf(”%d”, &val);

snail(arr, val);
arrprint(arr, val);

return 0;
}

void snail(int (*s)[50], int n)
{
int i, j;
int nb=1, i2=n-1;

for(i=0; ; i++)
{
for(j=i; j<n-i; j++)
{
s[i][j]=nb++;
if(nb>n*n)
return;
}
for(j=i+1; j<n-i; j++)
{
s[j][i2]=nb++;
if(nb>n*n)
return;
}
for(j=i2-1; j>=i; j–)
{
s[i2][j]=nb++;
if(nb>n*n)
return;
}
for(j=i2-1; j>i; j–)
{
s[j][i]=nb++;
if(nb>n*n)
return;
}
i2–;
}
}

void arrprint(int (*s)[50], int n)
{
int i, j;

for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf(”%5d ”, s[i][j]);
printf(”\n”);
}
}

/*
megashocking님의 Hisworld.tistory.com에서 배워야 할 부분
void snail(int (*s)[100], int n)
{
int i;
int in_num=1;
int x=0, y=-1, sw=1;
//in_num은 배열에 입력될 초기값
//x, y로 배열의 인자 위치를 좌표로 설정
//y가 -1인 이유는 반복문에서 초기 입력 위치 y를 [0]으로 만들기 위함.

      while(n!=0){
for(i=0 ; i<n ; i++)
{
y+=sw;
arr[x][y]=in_num++;
}

            n–; //가로->세로, 세로->가로 진행시 칸수가 하나씩 줄어듬.

            for(i=0 ; i<n ; i++)
{
x+=sw;
arr[x][y]=in_num;
}

            sw*=-1; //가로 방향이 오른쪽으로 진행되면 다음 가로방향은 왼쪽으로 진행됨.
}
}

arrprint함수
{
int i, j;

      for(i=0 ; i<n ; i++)
for(j=0 ; j<n ; j++)
printf(”%5d%s”, s[i][j], (j==n-1) ? ”\n” ? ”\t”);
//행의 끝에 다다르면 개행(\n) 그렇지 않으면 탭(\t)
*/

댓글 남기기