标签:思想 using line 幸好 etl 假设 数组 就是 space
第三章的这三个实验对于我们来说是既难,又不难。为什么会这样说呢?其实刚拿到三角形这道题的时候我脑袋一懵,老师上课讲的那些我是听懂了,可是真正实践起来的时候并非我想象中那样容易,并没有办法做到信手拈来,这使我有些懊丧。
但是幸好的是,我们组有一位同学在周末写完了之前的4道题目,她有了一些思路,在经过我们三人的讨论逐渐成型。这个时候我才体会到合作的乐趣。
其实第一道题相对我们来说并没有太大的难度,甚至第二题也能轻松解决。一二题目相对来说的确不是太难,很容易就能用填表的方法解决。难的是第三题。
……又得说万幸了,我们组的某个同学在实验室,老师才给他们说完这个例子,所以她对第三题非常理解,并且通过讲解让我们明白。
首先我们设了一个二维表,假设一行为a字符串,一列为b字符串,行列交错处的意思就是从b的那个字符串变成a需要花多少步骤,再慢慢利用填表的思想,我们就能解决这个问题。下面放上我们的代码:
#include<iostream>
#include<cstring>
using namespace std;
int c[2001][2001]; //字符串长度不超过2000,我们将末尾‘0’字符串算进去,所以用2001,而此处的二维数组对应我前面所说填写二维数组表
int main()
{
char a[2001],b[2001];
cin.getline(a,2001);
cin.getline(b,2001);
int len1 = strlen(a);
int len2 = strlen(b);
for(int i=0;i<=len1;i++){
c[0][i] = i;
}
for(int i=0;i<=len2;i++){
c[i][0] = i;
}
for(int i=1;i<=len2+1;i++){
for(int j=1;j<=len1+1;j++){
if(b[i-1]==a[j-1])
{
c[i][j] = min(c[i-1][j]+1,min(c[i][j-1]+1,c[i-1][j-1])); //这一步中,如果a和b所对应的字符相同,那么从a变成b过程中,欲填写表格的位置和它左边左上正上相关,如果两者相同,则会有“1”的区别。
}
else
{
c[i][j] = min(c[i-1][j]+1,min(c[i][j-1]+1,c[i-1][j-1]+1));
}
}
}
cout<<c[len2][len1];
return 0;
}
算法第三章实践报告
标签:思想 using line 幸好 etl 假设 数组 就是 space
原文地址:https://www.cnblogs.com/leeanna/p/11717380.html