码迷,mamicode.com
首页 > 编程语言 > 详细

算法第三章实践报告

时间:2019-10-22 00:36:00      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:思想   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!