算法设计与分析期末考试代码C语言版本
汉莫塔问题
#include <stdio.h>
void move(int n,int A,int B,int C)
{
if(n==1)
printf("%d-->%d\n",A,C);
else
{
move(n-1,A,C,B);
printf("%d-->%d\n",A,C);
move(n-1,B,A,C);
}
}
int main()
{
int n;
printf("输入有几层\n");
scanf("%d",&n);
move(n,1,2,3);
return 0;
}
杨辉三角
#include<stdio.h>
int main()
{
int i,j;
int a[7][7];
for(i=0;i<7;i++)
{
for(j=0;j<=i;j++)
{
if(i==j||j==0)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<7;i++)
{
for(int k=1;k<=7-i;k++)
printf(" ");
for(j=0;j<=i;j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
return 0;
}
最大公约数
#include<stdio.h>
int main()
{
int i,a,b,t;
printf("输入两个整数\n");
scanf("%d%d",&a,&b);
if(a<b)
{
t=a;
a=b;
b=t;
}
for(i=b;i>0;i--)
{
if(a%i==0&&b%i==0)
{
printf("最大公约数为%d\n",i);
break;
}
}
return 0;
}
斐波那契数列
#include<stdio.h>
int fiboi(int n)
{
int f1,f2,f3;
f1=1;
f2=1;
f3=1;
for(int i=2;i<n;i++)
{
f3=f1+f2;
f1=f2;
f2=f3;
}
return f3;
}
int main()
{
int i,n;
printf("输入想要的位数\n");
scanf("%2d",&n);
for(i=1;i<=n;i++)
{
printf("%6d",fiboi(i));
}
return 0;
}
数塔问题
#include <stdio.h>
int maxdata(int data1,int data2)
{
if(data1>data2)
return data1;
else
return data2;
}
int main()
{
int node;
int op[5][5]={0};//建立两个相同大小的二位数组
int data[5][5]={9, 0, 0, 0, 0,
12,15, 0, 0, 0,
10, 6, 8, 0, 0,
2,18, 9, 5, 0,
19, 7,10, 4,16};
int n=5,i,j,t=0;
for(j=0;j<n;j++)
{
op[n-1][j]=data[n-1][j];
}
for(i=3;i>=0;i--)
{
for(j=0;j<=i;j++)
{
t=maxdata(op[i+1][j],op[i+1][j+1]);
op[i][j]=t+data[i][j];
}
}
for(i=0;i<=4;i++)
{
for(j=0;j<=4;j++)
{
printf("%d ",op[i][j]);
}
printf("\n");
}
printf("路径之和最大为:%d\n",op[0][0]);
printf("最大路径:%d",data[0][0]);
for(i=1,j=0;i<n;i++){
node=op[i-1][j]-data[i-1][j];
if(node==op[i][j+1])
++j;
printf("——>%d",data[i][j]);
}
return 0;
}
代码均可正确运行。