본문 바로가기

개발&컴퓨터/알고리즘

마방진 만들기 (소스 코드 포함)

반응형

프로그램 개발에 대해 배우게 되면 기초로 구구단이라던지, 성적 계산, 마방진 이런 코드를 짜보게 됩니다.

 

이번에 소개할 코드는 마방진 구현 코드입니다.^^

컴퓨터를 뒤지다가 발견하였네요. ㅎㅎ

10년도 더 전에 프로그램 공부할 때, C로 짰던 고전!!! 마방진 코드입니다.

 

 

마방진이란 간단히, 아래 표처럼

 

 

4

9

2

3

5

7

8

1

6

가로와 세로로 홀수개의 칸이 존재하며, 각 칸에 포함된 숫자를 세로로 더한 값, 가로로 더한 값, 대각선으로 더한 값이 모두 동일하게 나오는 표를 말합니다.

위의 표는 어느 방향으로 숫자를 더하든지 간에 모두 15라는 값으로 동일합니다.

 

4 + 9 + 2 = 15 (상단 첫번째 열)

9 + 5 + 1 = 15 (가운데 세로열)

2 + 5 + 8 = 15 (우측 상단 - 좌측 하단 대각선)

 

 

아래 소스 코드는 표의 크기를 입력하면 자동으로 해당 표의 크기에 맞는 마방진을 만들어주는 코드입니다.

 

#include <stdio.h>


void main()

{

int magic[19][19] = {0, };
int i, j, ix, iy, x, y;

int count = 1, length, again;

 

printf("\t-----------------------------------\n");
printf("\t--  마  방  진   (Magic Square)  --\n");
printf("\t-----------------------------------\n\n");


while(1)
{

do

{

printf("\n\t만들기 원하는 마방진의 길이를 입력하세요.\n");
printf("\t(홀수만, 19이하) -> ");
scanf("%d", &length);

} while(length%2 == 0 || length < 0 || length > 19);


printf("\n");


x = length/2, y = 0;

count = 1;

  

for(i=0; i<length; i++)
    for(j=0; j<length; j++)
        magic[i][j] = 0;


for(i=0; i<length*length; i++)
{

magic[x][y] = count;

 
ix = x, iy = y;
x++, y--;
 
if(x > length-1) x = 0;
if(y < 0) y = length-1;


if(magic[x][y] != 0)

{

x = ix, y = iy + 1;

}


count++;

}


for(i=0; i<length; i++)

{

for(j=0; j<length; j++)

printf(" %3d", magic[j][i]);


printf("\n");

}


do

{

printf("\n\t다시 하시겠습니까? (YES : 1, No : 2> ");

scanf("%d", &again);

} while(again != 1 && again != 2);


if(again == 2)
    break;

}

} 

 

 

실행 화면은 다음과 같습니다. 간단하죠^^ 

 

 

 

 

 

소스코드와 실행 파일 받기 

MagicSquare.zip

 

 

순수 C로 구현되었기 때문에 C컴파일러만 있으면 빌드가 가능하며, 실행 파일 또한 포함되어 있습니다.

커맨드 환경(DOS 모드)으로 프로그램이 실행되며, 윈도우7에서도 정상 동작됨을 확인하였습니다.^^

 

반응형