/*
* Created by SharpDevelop.
* User: dwa2007
* Date: 2011-10-16
* Time: 오후 12:05
*
* 요술사각형 - 가로, 세로, 대각선의 합의 같음
* 1행의 중간을 1로 시작하여, 좌측 대각선 방향으로 올라가면서 빈칸에 1씩 증가된 숫자를 채운다.
*
* 상단을 벗어나면 행의 최하단으로, 좌측을 벗어나면 같은 행의 최우측으로 이동하되, 이동하려는 칸이 비어 있지 않으면
* 바로 빝의 칸으로 내려와 계속 실행한다.
*
* 각 행과 열 및 대각선의 합은 반드시 같아야 하고, 사각형의 행과 열의 개수는 같고, 반드시 홀수개어야 한다.
*/
using System;
namespace test
{
class Program
{
public static void Main(string[] args)
{
int [,] Arr = new int[7,7];
int r,c,val;
val = 1;
r = 0; // row 초기세팅
c = 3; // col 초기세팅
Arr[r,c] = val;
while(val <= Arr.Length -1){
val++;
if(r == 0 && c == 0)
{
r++; //[0,0]이면 [0,1]로 값을 저장할 배열주소 세팅
} else {
if(r-- == 0) r = Arr.GetLength(0) - 1; //row가 0이면
if(c-- == 0) c = Arr.GetLength(1) - 1; //col이 0이면
}
if (Arr[r,c] != 0){ //세팅한 배열주소에 이미 값이 존재하면
r += 2;
c += 1;
}
//Console.WriteLine("{0},{1}", r,c);
Arr[r,c] = val;
}
//여기부터는 값을 보여주는 곳
String s_val;
for(int i = 0; i < Arr.GetLength(0); i++){
for(int j = 0; j < Arr.GetLength(1); j++){
s_val = Arr[i,j].ToString();
s_val = (" " + s_val);
s_val = s_val.Substring(s_val.Length - 2); //right함수
Console.Write("{0} ", s_val);
}
Console.WriteLine();
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
/*
28 19 10 1 48 39 30
29 27 18 9 7 47 38
37 35 26 17 8 6 46
45 36 34 25 16 14 5
4 44 42 33 24 15 13
12 3 43 41 32 23 21
20 11 2 49 40 31 22
Press any key to continue . . .
*/