~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; }