마방진이란


정보처리기사 배열 마방진(Magic Square) 만들기 입니다.


#include <stdio.h>

//마방진의 크기를 결정
//홀수로 입력하되, 19미만이 보기 좋음
//7이상부터 19까지는 대각선 "우상좌하" 의 합이 다른 합과 다름
#define MAX 19

int main()
{
	//좌표 0, 2부터 시작 
	int i(0), j(2), k(1);
	int arr[MAX][MAX];

	for(k=1 ; k<=(MAX*MAX) ; k++)
	{
		//처음 0, 2에 1을 대입 
		arr[i][j] = k;
		
		//k가 배열 크기의 배수이면 규칙에 따라 행만 증가
		if(k%MAX == 0)
			++i;

		//k가 배열 크기의 배수가 아니면 규칙에 따라 "행감소, 열증가"
		if(k%MAX != 0)
		{			

			//마방진 규칙 "행감소, 열증가"
			--i;
			j++;

			//행이 감소하다가 0보다 작아지면 배열 크기의 가장 큰 값으로 교체
			if(i < 0)	i = MAX-1;

			//열이 증가하다가 배열 크기보다 커지면 0으로 교체
			if( j > (MAX-1) )	j = 0;
		}
	}

	//출력
	for(i=0 ; i<MAX ; i++)
	{
		for(j=0 ; j<MAX ; j++)
		{
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}

	printf("\n");

	return 0;
}


+ Recent posts