布阵规律为:
a、把1放在N*N方阵中的第一行中间一列,即放在位置为(1,(N+1)/2);
b、后一个数存放的行数比前一个数存放的行数减1,若这个行数为0,则取行数为N;
c、后一个数存放的列数比前一个数存放的列数加1,若这个列数为N+1,则取列数为1;
d、如果前一个数是N的倍数,则后一个数存放的列数不变,而行数加1。
1 class magic
2 {
3 [STAThread]
4 static void Main(string[] args)
5 {
6 //奇阶魔方阵
7 int n = 7;
8 int[,] magicd = new int[n, n];
9 int x = 0, y = (n + 1) / 2 - 1;
10 for(int i = 1; i <= n * n; i++)
11 {
12 magicd[x, y] = i;
13 if(i % n == 0)
14 {
15 x++;
16 }
17 else
18 {
19 x--;
20 y++;
21 }
22 check(ref x, ref y, n);
23 }
24 for(int i = 0; i < n; i++)
25 {
26 for(int j = 0; j < n; j++)
27 {
28 Console.Write(magicd[i, j].ToString() + "\t");
29 }
30 Console.WriteLine("");
31 }
32 Console.ReadLine();
33 }
34
35 private static void check(ref int x, ref int y, int n)
36 {
37 if(x < 0)
38 {
39 x = n - 1;
40 }
41 else if(x > n - 1)
42 {
43 x = 0;
44 }
45 if(y < 0)
46 {
47 y = n - 1;
48 }
49 else if(y > n - 1)
50 {
51 y = 0;
52 }
53 }
54 }
2 {
3 [STAThread]
4 static void Main(string[] args)
5 {
6 //奇阶魔方阵
7 int n = 7;
8 int[,] magicd = new int[n, n];
9 int x = 0, y = (n + 1) / 2 - 1;
10 for(int i = 1; i <= n * n; i++)
11 {
12 magicd[x, y] = i;
13 if(i % n == 0)
14 {
15 x++;
16 }
17 else
18 {
19 x--;
20 y++;
21 }
22 check(ref x, ref y, n);
23 }
24 for(int i = 0; i < n; i++)
25 {
26 for(int j = 0; j < n; j++)
27 {
28 Console.Write(magicd[i, j].ToString() + "\t");
29 }
30 Console.WriteLine("");
31 }
32 Console.ReadLine();
33 }
34
35 private static void check(ref int x, ref int y, int n)
36 {
37 if(x < 0)
38 {
39 x = n - 1;
40 }
41 else if(x > n - 1)
42 {
43 x = 0;
44 }
45 if(y < 0)
46 {
47 y = n - 1;
48 }
49 else if(y > n - 1)
50 {
51 y = 0;
52 }
53 }
54 }