算法实验报告Word文档下载推荐.docx

上传人:b****6 文档编号:17660639 上传时间:2022-12-07 格式:DOCX 页数:14 大小:204.46KB
下载 相关 举报
算法实验报告Word文档下载推荐.docx_第1页
第1页 / 共14页
算法实验报告Word文档下载推荐.docx_第2页
第2页 / 共14页
算法实验报告Word文档下载推荐.docx_第3页
第3页 / 共14页
算法实验报告Word文档下载推荐.docx_第4页
第4页 / 共14页
算法实验报告Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

算法实验报告Word文档下载推荐.docx

《算法实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《算法实验报告Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

算法实验报告Word文档下载推荐.docx

(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<

iostream>

#include<

iomanip>

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++;

}

j++)//右侧

{

a[j][n+1-i]=k;

for(j=n+1-i;

j>

=i+1;

j--)//下方

a[n+1-i][j]=k;

j--)//左侧

a[j][i]=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<

d++)

cout<

setw(6)<

left<

a[c][d]<

"

//空6个字符输出

1-8测试与说明

输入n的值,打印n*n的螺旋矩阵如下

1-9总结

对于趣味矩阵的算法实现,首先要观察矩阵的特点,还有规律,而且一般矩阵都使用二维数组。

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算法实现

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"

//输入不合法

是否继续

(1)yes

(2)no:

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算法描述

3-7算法实现

intmain()

intn,m,i,c;

intflag=0;

intj=0,k=0;

inta[50],b[50];

请输入山周围的洞口总数:

endl<

请输入狼每次经过洞口的个数:

m;

洞口号码依次为:

for(i=0;

i++)

a[i]=i;

a[i]<

狼依次经过的洞口号码为:

0"

b[0]=1;

c=0;

c+=m;

if(c>

=n)

c=c-n;

b[c]=1;

if(c==0)

if(b[i]!

=1)

兔子有幸免的机会"

endl;

兔子可以藏在"

洞口中"

flag=1;

if(flag==0)

兔子没有幸免的机会"

return0;

3-8测试与说明

输入洞口数还有每次访问的值则输出所需内容

3-9总结

标志位的使用,当为多种可能时候用数组,为两种情况时,使用变量

实验四

4-1问题描述

假设有52张纸牌,现在扑克牌全正面向上,第一轮从第二张开,凡是2的倍数位置上的牌翻为反面;

第二轮,凡是3的倍数的位置上,正面的翻为反面,反面翻为正面。

依次递推,当翻牌的数量大于104则停止翻牌。

统计最后由几张牌翻为正面,和它所对应的位置。

4-2问题分析

有52张纸牌,开始时扑克牌全正面向上,之后依次依次以2.3.4可以整除的数翻面,翻面超过104次的,则停止翻面,统计最后由几张牌翻为正面,和它所对应的位置。

4-3策略选择

使用标志位数组来记录他的正反面。

4-4模型

例26开灯问题

4-5时间及空间复杂度

4-6算法描述

a[52]为标志位,标志位正反面,每翻过一次求反,正为1反为-1,循环外层为k2,3,4……

每次为k的倍数i%k==0则反面a[i]=-a[i]控制翻面次数num;

a[i]=1时Cnum++记录为正的个数。

4-7算法实现

math.h>

inti,k,num=0,Cnum=0,a[52];

=52;

a[i]=1;

for(k=2;

k++)

for(i=1;

if(i%k==0)

{

a[i]=-a[i]

num++;

}

if(num>

=104)

break;

if(num>

if(a[i]==1)

Cnum++;

cout<

Cnum;

4-8测试与说明

输出为正面的牌的编号,和他们的个数,一共有26个

4-9总结

num>

=104控制翻面次数时,内外都需要判断,才能准确退出;

用数组作为标志位,正为1反为-1;

=104

实验五

5-1问题描述

两个乒乓球队进行分组,各出三人,甲队有ABC3人,乙队有XYZ3人,已经抽签决定比赛名单,有人向队员打听比赛名单,A说她不和X比,C说他不和X和Z比,请编写算法找出3对赛手的名单。

5-2问题分析

此问题为信息数字化的题目,根据题中的条件排除组合的可能性,将剩余的结果输出。

5-3策略选择

i是a的对手;

j是b的对手;

k是c的对手,对ijk进行赋值,是他满足,互不相同,且A说她不和X比,C说他不和X和Z比,相当于i!

='

X'

&

k!

Z'

5-4模型

例32警察抓小偷问题

5-5时间及空间复杂度

5-6算法描述

首先他们的对手不能互相重叠,需要一一对应(i!

=j)(i!

=k&

j!

=k),其次,题中给出的消息得到(i!

),将组合排除,剩下为结果

5-7算法实现

stdio.h>

{chari,j,k;

//i是a的对手;

k是c的对手

for(i='

for(j='

j++)

if(i!

=j)

for(k='

k<

=k)

A--%cB---%cC--%c\n"

i,j,k);

getchar();

5-8测试与说明

结果为A和Z一组B和X一组C和Y一组

5-9总结

问题为信息数字化的题目,应该将要排除的条件找出,特别是隐藏的条件,用于排除可能结果。

Getchar();

会让我们输入一个数才退出,所以会看到结果;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1