算法实验报告.docx
- 文档编号:4723309
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:14
- 大小:204.46KB
算法实验报告.docx
《算法实验报告.docx》由会员分享,可在线阅读,更多相关《算法实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
算法实验报告
算
法
实
验
报
告
学号_________
姓名_______
实验一
1-1问题描述
打印以下n*n方阵
1234567
2425262728298
2340414243309
22394849443110
21384746453211
20373635343312
19181716151413
1-2问题分析
此方正为螺旋方阵,依次存放1到n*n个数,数依次加一,要按顺时针逐圈摆放数据,就使数形成了螺旋形。
1-3策略选择
用二维数组存放数字,依次摆放1到n*n个数,数依次加一,要按顺时针逐圈分别处理上方,右侧,下方,左侧的数据。
1-4模型
例21螺旋阵
1-5时间及空间复杂度
时间复杂度
空间复杂度
1-6算法描述
1~24为第一圈,25~40为第二圈,i为圈数的控制,下标i<=n/2,
(1)i行(上方),从i列到n-i列
(2)n+1-i列(右侧),从i行到n-i行
(3)n+1-i行(下方),从i列到n-i列
(4)i列(左侧),从n+1-i行到ni+1行
当n为奇数时中间一个数没有形成圈,所以当为奇数时,要单独赋值为n*n.
1-7算法实现
#include
#include
usingnamespacestd;
voidmain()
{
inti,j,n,k,a[100][100]={0};
cout<<"请输入n:
";
cin>>n;
k=1;
for(i=1;i<=n/2;i++)//控制圈数
{
for(j=i;j<=n-i;j++)//上方
{
a[i][j]=k;
k++;
}
for(j=i;j<=n-i;j++)//右侧
{
a[j][n+1-i]=k;
k++;
}
for(j=n+1-i;j>=i+1;j--)//下方
{
a[n+1-i][j]=k;
k++;
}
for(j=n+1-i;j>=i+1;j--)//左侧
{
a[j][i]=k;
k++;
}
}
if(n%2==1)//当n为奇数时中间一个数没有形成圈
{
i=(n+1)/2;
a[i][i]=n*n;
}
for(intc=1;c<=n;c++)
{
cout<<'\n';
for(intd=1;d<=n;d++)
{
cout< } } } 1-8测试与说明 输入n的值,打印n*n的螺旋矩阵如下 1-9总结 对于趣味矩阵的算法实现,首先要观察矩阵的特点,还有规律,而且一般矩阵都使用二维数组。 #include cout< 配合使用 实验二 2-1问题描述 写出计算ackermann函数ack(m.n)的递归计算函数 2-2问题分析 对于m>=0.n>=0.ack(m,n) ack(0,n)=n+1; ack(m,0)=ack(m-1,1); ack(m,n)=ack(m-1,ack(m,n-1)) 2-3策略选择 使用递归算法,不断调用本身实现算法,公式题目已经给出。 2-4模型 递归调用 2-5时间及空间复杂度 时间复杂度 空间复杂度 2-6算法描述 当m=0时返回n+1; 当n=0时调用ack(m,0)=ack(m-1,1); 当m! =0&&n! =0时调用自身ack(m,n)=ack(m-1,ack(m,n-1) 2-7算法实现 #include usingnamespacestd; intakm(intm,intn) {//递归设计 intr,g; if(m==0) r=n+1; elseif(n==0) r=akm(m-1,1); else{ g=akm(m,n-1); r=akm(m-1,g);//两次连着递归 } returnr; } main(){ inta,b,c,i; while (1) { printf("inputtwonumbersaandb(a<4): "); scanf("%d%d",&a,&b); if(a<4)//为了防止无限进行下去 { c=akm(a,b);//调用函数计算结果 printf("theresultis: %d",c); } elseprintf("输入错误/n");//输入不合法 printf("是否继续 (1)yes (2)no: "); scanf("%d",&i); if(i! =1) break; } } 2-8测试与说明 输入a和b,为了防止不断调用,限制a<4 输入1继续,2退出 2-9总结 更好的理解了递归思想,和使用方法,递归在很大程度上增加了程序了理解性,减少了代码量。 实验三 3-1问题描述 狼找兔子问题: 一座山周围有n个洞,顺时针编号为0,1,2,3,4,…,n-1。 一只狼从0号洞开始,顺时针方向计数,每当经过第m个洞时,就进洞找兔子。 输入m,n。 试问兔子有没有幸免的机会? 如果有该藏在哪儿? 3-2问题分析 一座山周围有n个洞,顺时针给他编号为0,1,2,3,4,…,n-1。 从0号洞开始,顺时针方向计数,每当经过第m个洞时,问兔子有没有幸免的机会,输出洞的编号 3-3策略选择 使用标志位标记。 n个洞,编号为0,1,2,3,4,…,n-1。 从0号洞开始,顺时针方向计数,每当经过第m个洞时,改标志位为1。 第二次到0时说明会重复这个过程,所以不用再循环,如果还有洞的标志位还有有幸免的机会,输出洞的编号 3-4模型 例17手拉手问题 3-5时间及空间复杂度 时间复杂度 空间复杂度 3-6算法描述 n个洞,编号为0,1,2,3,4,…,n-1。 从0号洞开始,顺时针方向计数,每当经过第m个洞时,改标志位为1。 第二次到0时说明会重复这个过程,所以不用再循环,如果还有洞的标志位还有有幸免的机会,输出洞的编号 3-7算法实现 #include usingnamespacestd; intmain() { intn,m,i,c; intflag=0; intj=0,k=0; inta[50],b[50]; cout<<"请输入山周围的洞口总数: "; cin>>n;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)