人人范文网 范文大全

魔方阵 实验报告

发布时间:2020-03-03 05:41:13 来源:范文大全 收藏本文 下载本文 手机版

>实验报告

一. 实验目的

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函数中实现。

奇数阶魔方阵算法分析

盲人方阵

方阵解说词

方阵体

方阵问题

盲人方阵

学生会方阵

盲人方阵

盲人方阵

盲人方阵

魔方阵 实验报告
《魔方阵 实验报告.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档