1、教育科学与技术学院二二维数数组的的应用用魔方魔方阵算法的算法的设计与与实现刘立云刘立云 2014年年5月月24日日1Outline魔方阵的提出1算法的流程图3魔方阵的编程实现4魔方阵算法的设计221234分析分析问题 确定算法确定算法调试并并整理文整理文档档Review3Induce 魔方魔方阵,古代又称,古代又称“纵横横图”,是指是指NNNN方方阵的的组成元素成元素为自然数自然数1 1、2N2N的平方,其中每个元素的平方,其中每个元素值都不相都不相等,要求等,要求满足以下条件:足以下条件:每行每行N个元素之和个元素之和每列每列N个元素之和个元素之和主主对角角线上上N个元素之和个元素之和副副对
2、角角线上上N个元素之和个元素之和相等相等4请将将1 12525共共2525个数字填入个数字填入5*55*5的矩的矩阵中,使中,使每行每列以及每行每列以及对角角线上的累加和都相等上的累加和都相等。Game546132022571416241815101219213231711182529Realize6Algorithm7Stepofalgorithmdesign1234二二维数数组存存储魔方魔方阵二二维数数组中所有元中所有元素初始化素初始化为0依次将依次将2到到25存放存放进数数组8魔魔方方阵算算法法的的流流程程图Flowchart910Programing#include#defineN5m
3、ain()intaNN,i,j,k;for(i=0;iN;i+)/*初始化二初始化二维数数组*/for(j=0;jN;j+)aij=0;i=0;j=N/2;/*将1存放在第一行中间位置*/aij=1;/*以下依次将以下依次将225填充填充进二二维数数组,建立魔方,建立魔方阵*/for(k=2;k=N*N;k+)m=i;/*记录上一个数的行下上一个数的行下标*/n=j;/*记录上一个数的列下上一个数的列下标*/i=i-1;j=j+1;if(iN-1)j=0;/*上一个数在上一个数在N-1列列,则下一个数在第下一个数在第0列列*/if(aij!=0)i=m+1;j=n;/*若找到新的位置已若找到新
4、的位置已经被占用被占用 新数新数应放在上一个数的下方放在上一个数的下方*/aij=k;/*将新数将新数k填填进数数组*/for(i=0;iN;i+)/*输出魔方出魔方阵*/for(j=0;jN;j+)printf(%4d,aij);printf(n);程序运行结果如下:11Think12Think2:螺旋方阵1 12 2 3 3 4 4 5 5 6 61818 19192020212122227 71717 28282929303023238 81616 27272626252524249 91515 1414131312121111101013Think3:塔型方阵11 1 1 1 11122 2 2 211233 3 2112222 21111111114Think4:杨辉三角1 11 121 1331 14641 1510 10511615 20 156115魔方阵Summary16Hope 读书破万卷,下笔如有神。破万卷,下笔如有神。编程也程也如此!如此!欢迎各位提出宝贵意见!17