算法设计与分析:3阶魔方阵要求在一个nXn的矩阵中填入1到n2(n的二次方)的数字(n为奇数),使得每一行、每一列、每条对角线的累加和都相等.(1)证明:n阶魔方阵中每一行、每一列、每条

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 23:33:47
算法设计与分析:3阶魔方阵要求在一个nXn的矩阵中填入1到n2(n的二次方)的数字(n为奇数),使得每一行、每一列、每条对角线的累加和都相等.(1)证明:n阶魔方阵中每一行、每一列、每条

算法设计与分析:3阶魔方阵要求在一个nXn的矩阵中填入1到n2(n的二次方)的数字(n为奇数),使得每一行、每一列、每条对角线的累加和都相等.(1)证明:n阶魔方阵中每一行、每一列、每条
算法设计与分析:3阶魔方阵
要求在一个nXn的矩阵中填入1到n2(n的二次方)的数字(n为奇数),使得每一行、每一列、每条对角线的累加和都相等.
(1)证明:n阶魔方阵中每一行、每一列、每条对角线的累加和一定等于n(n2+1)/2.
(2)设计蛮力算法生成n阶魔方阵.还有其他更好的算法吗?

算法设计与分析:3阶魔方阵要求在一个nXn的矩阵中填入1到n2(n的二次方)的数字(n为奇数),使得每一行、每一列、每条对角线的累加和都相等.(1)证明:n阶魔方阵中每一行、每一列、每条
如果我们将1,2,……n2按某种规则依次填入到方阵中,得到的恰好是奇次魔方阵,这个规则可以描述如下:
(1)首先将1填在方阵第一行的中间,即(1,(n+1)/2)的位置;
(2)下一个数填在上一个数的主对角线的上方,若上一个数的位置是(i,j),下一个数应填在(i1,j1),其中i1=i-1、j1=j-1.
(3)若应填写的位置下标出界,则出界的值用n 来替代;即若i-1=0,则取i1=n;若j-1=0,则取j1=n.
(4)若应填的位置虽然没有出界,但是已经填有数据的话,则应填在上一个数的下面(行加1,列不变),即取i1=i+1,j1=j.
这样循环填数,直到把n*n个数全部填入方阵中,最后得到的是一个n阶魔方阵.
main( )
{int i,j, i1,j1,x,n,t,a[100][100];
print(“input an odd number:”);
input(n);
if (n mod 2=0) {print(“input error!”); return;}
for( i=1;i

1、累加和=所有数字和/行数=(1+n2)*n2/2n=n(n2+1)/2

2、这叫幻方

3、奇数阶幻方有构造方法:

从1开始,往右斜上顺次填写。

       特殊情况:如果数字出了幻方,将该数填至行或列的另一端。

       特殊情况2: 如果要填写的格子被占了,数填在格子下方一格。

       特殊情况3: 我忘了。