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 |
Delegate (0) | 2007.08.14 |
윈폼 제작 (0) | 2007.08.14 |