#title C#-요술사각형 {{{ /* * 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 . . . */ }}}