본문 바로가기

.NET

3X3 마방진

using System;
using System.Collections.Generic;
using System.Text;

namespace Com.Kaoni.Money
{
    /// <summary>
    /// N X N  3 X 3 마방진 구하기
    /// </summary>
    public class OddMagicSquare
    {
        //이차원 배열
        private int[,] magic;
        //마방진 사이즈
        private int n;
       
        /// <summary>
        /// 인자있는 생성자
        /// </summary>
        /// <param name="n"></param>
        public OddMagicSquare(int n)
        {
            this.n = n;
            Init(n);
        }

        /// <summary>
        /// 기본생성자 3값이 위의 int n 에 들어감
        /// </summary>
        public OddMagicSquare() : this(3)
        {

        }
        /// <summary>
        /// 배열을 초기화
        /// </summary>
        /// <param name="n">마방진 사이즈</param>
        private void Init(int n)
        {
            magic = new int [n,n];
        }//Init

        /// <summary>
        /// 마방진 생성하기
        /// </summary>
        public void Make()
        {
            int top = n - 1;
            int x = 0;
            int y = top / 2;

            //중앙에 1을 넣음
            magic[x, y] = 1;

            for (int i = 2; i <= n*n; i++)
            {
                int temX = x;
                int temY = y;

                //top을 한 경우
                if (x - 1 < 0)
                {
                    x = top;
                }
                else
                {
                    x--;
                }

                if (y - 1 < 0)
                {
                    y = top;
                }
                else
                {
                    y--;
                }

                if (magic[x, y] != 0)
                {
                    x = temX + 1;
                    y = temY;
                   
                }
                magic[x, y] = i;
               
            }
        }//Make

        /// <summary>
        /// 마방진 출력
        /// </summary>
        public void PrintMagic()
        {
            for (int i = 0; i < magic.GetLength(0); i++)
            {
                for (int j = 0; j < magic.GetLength(1); j++)
                {
                    Console.Write("{0}\t", magic[i,j]);
                }
                Console.WriteLine();
               
            }
        }//PrintMagic

        /// <summary>
        /// 모든 마방진 체크
        /// </summary>
        /// <returns></returns>
        public bool Check()
        {
            bool isC = true;
            int checkNum = n * 2 + 2;
            int[] checks = new int[checkNum];

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {  
                    checks[i] += magic[i, j];
                    //4번째부터
                    checks[n + i] += magic[j, i];
                }
                checks[2 * n] += magic[i, i];
                checks[2 * n + 1] += magic[i, n - 1 - i];
            }

            for (int i = 1; i < checks.Length; i++)
            {
                if (checks[0] != checks[i])
                {
                    isC = false;
                    break;
                }
             
   
            }
            return isC;
        }//Check

    }//OddMagicSquare

}//namespace Com.Kaoni.Money


OddMagicSquare.cs

========================================

using System;
using System.Collections.Generic;
using System.Text;
using Com.Kaoni.Down;

namespace Com.Kaoni.Money
{
    public class LoanMain
    {
        public static void Main(string[] args)
        {
            //Installment ist = new Installment();
            //Console.WriteLine("{0}원 임.",ist.MakeMoney(300000,4,1));
            //SunMath sm = new SunMath();
            //Console.WriteLine("e^1={0}", SunMath.Expo(1));
            //Console.WriteLine("Sin({0})= {1}", Math.PI/2.0, SunMath.Sin(Math.PI/2.0));
            //SunMath.PrintSin();
            OddMagicSquare oms = new OddMagicSquare(9);
            oms.Make();
            oms.PrintMagic();
            Console.WriteLine("유효 마방진?{0}",oms.Check());
        }
    }
}

LoanMain.cs

==============================================================

'.NET' 카테고리의 다른 글

css 화면 클릭 => 새로운 레이어 띄우기  (2) 2007.08.18
1~100까지 소수 구하기  (0) 2007.08.17
오버로딩과 오버라이딩  (0) 2007.08.17
3X3 마방진  (1) 2007.08.14
Delegate  (0) 2007.08.14
윈폼 제작  (0) 2007.08.14

태그