~cpp
#include <iostream>
using namespace std;
int main()
{
int size;
int i, j;
do{ //홀수 ìž…ë ¥í• ë•Œê¹Œì§€ 반복
cout << "마방진 사ì�´ì¦ˆ ìž…ë ¥(홀수) : ";
cin >> size;
if ( !(size%2))
cout << "ë‹¤ì‹œìž…ë ¥!\n";
}while(!(size%2));
int **board = new int * [size+2]; //ë�™ì � 2ì°¨ì›� ë°°ì—´ ìƒ�성
for(i=0; i< size+2; i++)
board[i] = new int [size+2];
for(i=0; i<size+2; i++) //배열 초기화
for(j=0; j<size+2; j++)
board[i][j] = 0;
int num = 1;
int row = 1;
int mid = size / 2;
int col = mid + 1;
board[row][col] = num;
while(num != size*size) //숫�를 다 넣�때까지 반복
{
row --; col ++; //한칸 위로, 한칸 오른쪽으로
if (row == 0) //ë²½ì—� ë¶€ë”ªì¹ ê²½ìš°
row = size;
//좌표 변환
if (col == size+1) //ë²½ì—� ë¶€ë”ªì¹ ê²½ìš°
col = 1; //좌표 변환
if (!board[row][col]) //�리가 비어있� 경우
{
num++;
board[row][col] = num; //숫� 대입
}
else //�리� 다른 숫�가 있� 경우
{
row ++; col --; //움ì§�ì�´ê¸° ì „ìœ¼ë¡œ ë�Œì•„옴
if (row == 0) //ë²½ì—� ë¶€ë”ªì¹ ê²½ìš°
row = size; //좌표 변환
if (col == size) //ë²½ì—� ë¶€ë”ªì¹ ê²½ìš°
col = 1; //좌표 변환
if ( row == size && col == 1)//좌표가 왼쪽 맨 아래� 경우
{
row=1; col = size; //오른족 맨 위로
}
else //그 밖� 경우
{
row--; col++; //��림
}
row++; //한칸 밑으로
num++;
board[row][col] = num; //숫� 대입
}
}
for(i=1; i<size+1; i++) //ì¶œë ¥
{
for(j=1; j<size+1; j++)
{
cout << board[i][j] <<"\t";
}
cout << "\n";
}
return 0;
}