算法
实验报告
化学实验报告单总流体力学实验报告观察种子结构实验报告观察种子结构实验报告单观察种子的结构实验报告单
,二分搜索,矩阵联乘,最长公共子序列
实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
实验一:
一、实验名称
二分搜索法
二、实验目的
编写程序实现用二分法在一有序序列中查找一个数
三、实验内容
1、程序源代码
#include
int Research(int a[],int x,int n)
{
int left=0,right=n-1,mid;
if(n>0&&x>=a[0])
{
while(left=0)
printf("%d 在数组中的下标为 %d!\n\n",x,j);
else
printf("没找到!\n\n");
}
main()
{
Input();
}
2、实验结果
输入数组长度 n :5 输入数组长度 n :4
输入有序数组(升序): 输入有序数组(升序):
a[0]:1 a[0]:1
a[1]:3 a[1]:2
a[2]:5 a[2]:3
a[3]:7 a[3]:4
a[4]:9 输入要查询的数字:2
输入要查询的数字:6 2 在数组中的下标为 1!
没找到! Press any key to continue
Press any key to continue
实验二
一、实验名称
矩阵连乘求最小计算次数
二、实验目的
编写程序用动态规划法计算矩阵连乘的最优值
三、实验内容
1、实验源代码
#include
#define MAX 100
int main()
{
int p[MAX],i,j,k,r,t,n;
int m[MAX][MAX]; //记录从第i到第j个矩阵连乘的最少计算次数
int s[MAX][MAX]; //记录从第i到第j个矩阵连乘的断开位置
printf("输入连乘矩阵的个数:");
scanf("%d",&n);
for(i=0;i
#include
void LCSLength(int m, int n, char *x, char *y, int (*c)[20], int (*b)[20])
{
int i,j;
for(i = 0; i <= m; i ++)
{
c[i][0] = 0;
}
for(i = 0; i <= n; i ++)
{
c[0][i] = 0;
}
for(i = 1; i <= m; i ++)
{
for(j = 1; j <= n; j ++)
{
if(x[i] == y[j])
{
c[i][j] = c[i-1][j-1] + 1;
b[i][j] = 1;
}
else if(c[i - 1][j] >= c[i][j - 1])
{
c[i][j] = c[i - 1][j];
b[i][j] = 2;
}
else
{
c[i][j] = c[i][j - 1];
b[i][j] = 3;
}
}
}
}
void LCS(int i,int j,char *x, int (*b)[20])
{
if(i == 0 || j == 0)
return;
if(b[i][j] == 1)
{
LCS(i - 1, j - 1, x, b);
printf("%c",x[i]);
}
else if(b[i][j] == 2)
LCS(i - 1, j, x, b);
else
LCS(i, j - 1, x, b); }
int main()
{
char X[20], Y[20];
int b[20][20],c[20][20];
int m,n;
X[0] = Y[0] = '$';
printf("请输入字符串X的内容:");
gets(&X[1]);
printf("请输入字符串Y的内容:");
gets(&Y[1]);
m = strlen(X);
n = strlen(Y);
printf("字符串X的长度是%d,字符串Y的长度是%d\n",m,n);
LCSLength(m, n, X, Y, c, b);
printf("最长的公共子序列是:\n");
LCS(m, n, X, b);
return 0;
}
2、实验结果
请输入字符串X的内容:acbdhgyeiop
请输入字符串Y的内容:nibgdsbcdg
字符串X的长度是11,字符串Y的长度是10
最长的公共子序列是:bg
。