魔方阵 实验报告_实验报告五幻方矩阵

2020-02-28 其他范文 下载本文

魔方阵 实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验报告五幻方矩阵”。

>实验报告

一. 实验目的1.设计数据结构;

2.设计算法完成任意n阶魔方阵的填数; 3.分析算法的时间复杂度。

二. 实验内容

魔方阵,又叫幻方阵,在我国古代称为“纵横图”。它是在一个n*n的矩阵中填入1到n*n的数字(n为奇数),使得每一行,每一列,每条对角线的累加和都相等。

三. 程序代码

源程序:

#include void Square(int n){ int a[9][9];

int p=0, q=(n-1)/2;

a[0][q]=1;

//在第0行的中间位置填1

for(int i=2;i

{

p=(p-1+n)% n;

//求i所在行号

q=(q-1+n)% n;

//求i所在列号

if(a[p][q]>0){

p=(p+2)%n;q=(q+1)%n;

//这两句进行了修改,否者得不到正确的答案,切记切记!!

}//如果位置(p, q)已经有数,填入同一列下一行

a[p][q]=i;

}

for(p=0;p

{for(q=0;q

cout

cout

void main(){ int n;cout>n;cout

Square(n);} 四.结果与心得体会

1.程序的测试结果是什么? 答:n=3时

n=5时

2.在调试的过程中遇到了什么问题,是如何解决的?

答:在调试的过程中遇到了以下几个问题:

1.Square函数的形式参数不可以是(int a[][], int n),因为程序是在编译时就会为数组分配内存,而那样的形式参数是不合理的。在调试程序的过程中,我反复试了好多次,也证明了那是错的。解决方法:直接将Square函数的形参设为(int n),改在在其函数内定义数组a[9][9],这样就能将问题很好的解决。

2.在书中提供的Square函数里面,有一个语句是这样的if(a[p][q]>0)

p=(p+1)%n;,这个语句是错的。之所以会有这样的错误,是由于错误的理解了“如果位置(p, q)已经有数,填入同一列下一行”这一句的意思,这句的意思是填入原数的下面,而不是即将填入的那个数但又已填入数的那个数的下面。

解决方法:将该语句改成:

if(a[p][q]>0)

{

p=(p+2)%n;q=(q+1)%n;

},这样就可以了。

3.由于数组a[][]是在Square函数中定义的,因此将数组数据输出的语句就只能放在Square函数中实现。

《魔方阵 实验报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
魔方阵 实验报告
点击下载文档
相关专题 实验报告五幻方矩阵 实验报告 魔方 实验报告五幻方矩阵 实验报告 魔方
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文