출처 : 반크 카드뉴스
문제]
하나의 홀수를 읽어 그에 해당하는 마방진(magic square)을 구성하는 프로그램을 작성하시오. 마방진은 가로, 세로, 대각선에 있는 수들의 합이 모두 같은 정방형 메트릭스를 말한다.
다음은 3을 입력으로 받아 만들어진 3X3 마방진이다.
8 | 1 | 6 |
3 | 5 | 7 |
4 | 9 | 2 |
참고풀이]
using System;
using System.Collections.Generic;
using System.Text;
namespace Chapter3
{
class P151_3_9_12
{
public static void Main(String[] args)
{
int N;//마방진 수 입력변수
int r, c;//행,열변수
int cnt;//증가값 변수
//마방진 수을 입력받는다. 마방진 수는 홀수로 한다.
while(true)
{
Console.Write("마방진 수를 입력하시오 : ");
N = Int32.Parse(Console.ReadLine());
if (N % 2 == 1) break;
Console.WriteLine("입력 수는 홀수가 아닙니다.");
Environment.Exit(0);
}
//입력한 수의 마방진 배열을 설정한다.
int[,] A = new int[N, N];
//0행 중간열에 1을 넣는다.
cnt = 1;
r = 0;
c = N / 2;
A[r,c] = 1;
//배열에 마방진 조건에 맞게 수를 넣는다.
while(true)
{
cnt++;
if (cnt > N * N) break;
//수가 입력수의 나머지값이 1일때 행만 증가한다.
if (cnt % N == 1) r++;
else
{
//행은 1씩 감소하고 열은 1씩 증가한다.
r--;
c++;
}
//행이 0보다 작은면 행의 끝위치로 정한다.
if (r < 0) r = N - 1;
//열이 끝위치 보다 크면 열은 처음으로 정한다.
if (c > N - 1) c = 0;
//증가값을 행열위치에 넣는다.
A[r, c] = cnt;
}
//결과값 출력
for(r=0;r<N;r++)
{
for (c = 0; c < N; c++)
Console.Write("{0,4}", A[r, c]);
Console.WriteLine();
}
}
}
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 가을
댓글