찰리의 놀이터

(C언어) 홀수 마방진 만드는 코드 본문

알고리즘 공부

(C언어) 홀수 마방진 만드는 코드

차알리 2021. 4. 4. 22:30

코린이의 관점에서 작성한 코드이고 조언이 있다면 댓글 부탁드립니다 !

입력 예 (input.txt)

3

출력 예 (output.txt)

8 1 6

3 5 7

4 9 2

 

 

#define _CRT_SECURE_NO_WARINGS
#include <stdio.h>
/*오른쪽 그림과 같이 가로 세로 대각선의 합 일정한
사각형을 마방진이라고 한다. 홀수 N을 입력받아 N*N
마방진을 만들어 출력하는 프로그램을 작성하시오.*/
#define N 50
int arr[N][N];
int main(void)
{
int x, y, x1, y1, count, in;
scanf("%d", &in);
x=(in+1)/2;
y=1;
count=1;
arr[y][x] = count;
while(1)
{
x1 = x; //처음 자리로 돌아가는 수 저장
y1 = y;
count++; //숫자 증가
x++; //오른쪽으로 한 칸 이동
y--; //위쪽으로 한 칸 이동
if(x>in) //오른쪽 끝이면 왼쪽 끝으로
x = 1;
if(y<1) //위쪽 끝이면 아래쪽으로
y = in;
if(arr[y][x] != 0) //오른쪽 위쪽에 숫자가 있으면
x=x1, y=y1+1; //움직이기 전 자리에서 아래쪽
arr[y][x] = count;
if(count>=in*in) //입력수의 제곱이 되면 종료
break;
}
for(x=1;x<=in;x++)
{
for(y=1;y<=in;y++)
printf("%-3d", arr[x][y]);
printf("\n");
}
}
view raw I53.c hosted with ❤ by GitHub