算法设计与分析问题:3阶魔方阵.要求在一个N xN的矩阵中填入1到n2(n的二次方)的数字(n为奇数),如图所示3阶魔方阵(1)证明:n阶魔方阵中每一行、每一列、每条对角线的累加和一定等于n(
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/23 21:52:17
算法设计与分析问题:3阶魔方阵.要求在一个N xN的矩阵中填入1到n2(n的二次方)的数字(n为奇数),如图所示3阶魔方阵(1)证明:n阶魔方阵中每一行、每一列、每条对角线的累加和一定等于n(
算法设计与分析问题:3阶魔方阵.
要求在一个N xN的矩阵中填入1到n2(n的二次方)的数字(n为奇数),如图所示3阶魔方阵
(1)证明:n阶魔方阵中每一行、每一列、每条对角线的累加和一定等于n(n2+1)/2;
(2)设计蛮力算法生成n阶魔方阵.还有其他更好的算法吗?
算法设计与分析问题:3阶魔方阵.要求在一个N xN的矩阵中填入1到n2(n的二次方)的数字(n为奇数),如图所示3阶魔方阵(1)证明:n阶魔方阵中每一行、每一列、每条对角线的累加和一定等于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