본문 바로가기
프로그램/C# 1000제

C# 25제] C# 프로그램 입문 CHAPTER 3. p151 3.9 (12) 마방진 구하는 프로그램을 작성하시오.

by 건티 2021. 9. 3.
728x90

출처 : 반크 카드뉴스

 

 

문제]

하나의 홀수를 읽어 그에 해당하는 마방진(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();
            }
        }
    }
}

 

참고풀이 결과]

 

 

 

대한민국의 아름다운 영토, 독도의 가을

 

 

반응형

댓글