一、奇阶魔方阵 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。
布阵规律为:
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
}
class magic2
{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
else18
{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
}

浙公网安备 33010602011771号