什么是魔方矩阵

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 22:21:25
什么是魔方矩阵

什么是魔方矩阵
什么是魔方矩阵

什么是魔方矩阵
魔术矩阵是由一个n×n(n为奇数)的整数矩阵构成,矩阵中的整数值是从1~n^2[n的平方].每一行,每一列和两个对角线上数值之和是一样的.
下面我以n=5的魔术矩阵为例,给出详细的说明
15
8
1
24
17

16
14
7
5
23

22
20
13
6
4

3
21
19
12
10

9
2
25
18
11

这个n为5的魔术矩阵,他的每一行,每一列,两个对角线的和均为65
算法设计:
先在矩阵第一行中间的位置上放1,然后把数字按照升序沿着左上角放置到矩阵中.如果越界了,就假设周围还有一个矩阵,将数字放到那个位置上;如果那个位置已经被占据了,就跳过该位置放到下面的位置,然后重新按照原来的方法放.如图:在5×5的魔术矩阵中,放完1以后,就把2放到1的左上角,但是此时已经越界了.假设,在原来的矩阵上面还有一个矩阵,则数字2所放的位置应该是在最后一行的第二个位置,接下去就要把数字3放到2的左上角,依次放下去,当放到6的时候,由于1已经将下一个位置占了,所以就放到5下面的位置.依照这样的规律直到把数字都放完.
程序设计:
#include
#define Max_Size 15
void main()
{
static int square[Max_Size][Max_Size];
int i,j,row,column,count,size;
printf("输入的矩阵大小:\n");
scanf("%d",&size);
if(size<1||size>Max_Size+1)
{
printf("输入的矩阵太大!");
//exit(1);
}
if(!(size % 2))
{
printf("大小不能为偶数");
//exit(1);
}
for(i=0;i for(j=0;j square[i][j] = 0;
square[0][(size-1)/2] = 1;
i = 0;
j = (size-1)/2;
for(count=2;count<=size*size;count++)
{
row = (i-1<0)?(size-1):(i-1);
column=(j-1<0)?(size-1):(j-1);
if(square[row][column])
i=(++i)%size;
else
{
i = row;
j = (j-1<0)?(size-1):--j;
}
square[i][j] = count;
}
printf("大小为%d的魔术矩阵为:\n",size);
for(i=0;i {
for(j=0;j {
printf("%4d",square[i][j]);
}
printf("\n");
}
}
程序输出:
输入的矩阵大小:
5
大小为5的魔术矩阵为:
15 8 1 24 17
16 14 7 5 23
22 20 13 6 4
3 21 19 12 10
9 2 25 18 11