算法设计与分析实验报告Word文件下载.docx

上传人:b****6 文档编号:20434501 上传时间:2023-01-23 格式:DOCX 页数:13 大小:236.56KB
下载 相关 举报
算法设计与分析实验报告Word文件下载.docx_第1页
第1页 / 共13页
算法设计与分析实验报告Word文件下载.docx_第2页
第2页 / 共13页
算法设计与分析实验报告Word文件下载.docx_第3页
第3页 / 共13页
算法设计与分析实验报告Word文件下载.docx_第4页
第4页 / 共13页
算法设计与分析实验报告Word文件下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

算法设计与分析实验报告Word文件下载.docx

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

算法设计与分析实验报告Word文件下载.docx

else

{

hanoi(n-1,from,to,denpend_on);

//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上

move(n,from,to);

//将剩下的一个盘子移动到目的塔上

hanoi(n-1,denpend_on,from,to);

//最后将借用塔上的n-1个盘子移动到目的塔上

}

voidmain()

printf("

请输入盘子的个数:

\n"

);

intn;

scanf("

%d"

&

n);

charx='

A'

y='

B'

z='

C'

;

盘子移动情况如下:

hanoi(n,x,y,z);

}

实验结果:

实验2:

杨辉三角:

#include<

voidprint(int*row,intn)

{

inti;

for(i=1;

i<

n;

i++)

{

if(row[i]!

=0)

{

printf("

row[i]);

row[i]=0;

//置为初始态,方便保存下一行

}

else

"

}

voidinitia(intnum)

intup_row[20];

intnext_row[20];

inti,j;

for(i=0;

=num*2;

up_row[i]=0;

next_row[i]=0;

up_row[num]=next_row[num]=1;

num;

i++)//控制行

for(j=1;

j<

num+i+1;

j++)

up_row[j]=next_row[j];

//保存当前输出行

print(next_row,num+i+1);

//本行输出的有效数据个数为当前行数

=num+i+1;

j++)//0号位的值保留以便下行计算

next_row[j]=up_row[j-1]+up_row[j+1];

//下一行相应位置的值是上一行相应位置左右值的和

intmain(void)

intnum_row;

确定行数(小于10):

"

num_row);

initia(num_row);

return0;

方法2:

动态规划实现:

#defineMAXH31

unsignedlongnum[MAXH]={0};

inti,j,k;

Inputanumbertosetrow:

num[0]=1;

i=0;

for(k=n-i;

k>

0;

k--)

printf("

for(j=i;

j>

j--)

{

num[j]=num[j]+num[j-1];

%d"

num[j]);

}

%d\n"

1);

实验3:

背包问题:

intc[10][100];

/*对应每种情况的最大价值*/

intknapsack(intm,intn)

inti,j,w[10],p[10];

\n输入每个物品的重量及价值:

=n;

%d,%d"

w[i],&

p[i]);

10;

for(j=0;

100;

c[i][j]=0;

/*初始化数组*/

=m;

if(w[i]<

=j)/*如果当前物品的容量小于背包容量*/

{

if(p[i]+c[i-1][j-w[i]]>

c[i-1][j])

/*如果本物品的价值加上背包剩下的空间能放的物品的价值*/

/*大于上一次选择的最佳方案则更新c[i][j]*/

c[i][j]=p[i]+c[i-1][j-w[i]];

else

c[i][j]=c[i-1][j];

elsec[i][j]=c[i-1][j];

return(c[n][m]);

intmain()

intm,n;

intmaxvalue;

输入背包的承重量:

m);

\n输入物品的总个数:

maxvalue=knapsack(m,n);

\n背包能装的最大总价值为%d"

maxvalue);

实验4:

斐波那契数列:

voidmain()

intFibonacci(intn);

intn,i;

longintc=0;

求斐波那契数组:

|0n=0\n"

F(n)={1n=1\n"

|F(n-1)+F(n-2)n>

1\n"

请输入n的值:

i<

i++)

c=Fibonacci(i);

%-10ld"

c);

if(i%5==0)//每输出5个换一行;

intFibonacci(intn)//函数部分;

longintfib;

if(n==0)

fib=0;

elseif(n==1||n==2)

fib=1;

elseif(n>

=3)

fib=Fibonacci(n-1)+Fibonacci(n-2);

returnfib;

实验5:

归并排序

iostream.h>

int*a=newint[20];

intn=0;

//归并排序,排序结果放到了b[]中

voidMerge(inta[],intb[],intleft,intmid,intright)//此处的right指向数组中左后一个元素的位置

inti=left;

intj=mid+1;

intk=left;

while(i<

=mid&

&

=right)

if(a[i]<

=a[j])b[k++]=a[i++];

elseb[k++]=a[j++];

=mid)b[k++]=a[i++];

while(j<

=right)b[k++]=a[j++];

}//从b[]中又搬到了a[]中

voidCopy(inta[],intb[],intleft,intright)//right同上

for(inti=left;

=right;

a[i]=b[i];

}//划分并排序

voidMergeSort(inta[],intleft,intright)//同上

int*b=newint[right+1];

if(left<

right)

//将当前传经来的数组划分成更小的大小几乎相同的数组

inti=(left+right)/2;

MergeSort(a,left,i);

MergeSort(a,i+1,right);

//将小数组合成大数组,同时排序,结果放到b[]中

Merge(a,b,left,i,right);

//从b[]中挪到a[]中

Copy(a,b,left,right);

}voidInput()

cout<

<

PleaseInputarray'

ssize:

cin>

>

Array'

selemants:

endl;

for(inti=0;

a[i];

//调用算法

MergeSort(a,0,n-1);

}voidOutput()

a[i]<

}voidmain()

Input();

Output();

实验6:

二分查找:

intsearch(inta[],ints,intr,intkey)

intlow=s,high=r,mid;

if(s<

=r)

mid=(high+low)/2;

if(a[mid]==key)

returnmid;

if(a[mid]<

key)

returnsearch(a,mid+1,high,key);

if(a[mid]>

returnsearch(a,low,mid-1,key);

return-1;

intmain()

intn,a[10000],key,k,i;

请输入数组大小:

while(scanf("

n)!

=EOF)

for(i=0;

i++)

scanf("

a[i]);

printf("

请输入要查找的数:

scanf("

key);

k=search(a,0,n-1,key);

if(k==-1)

NO\n未找到!

YES\n"

该数位置在第%d位!

k+1);

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

当前位置:首页 > 自然科学 > 化学

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

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