魔方阵算法(一)

一、奇阶魔方阵 N=2*M+1(M=1,2,3,……)
布阵规律为:
  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    }
原文地址:https://www.cnblogs.com/faib/p/659789.html