解题思路:
题目的最终结果:
对任给的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。
就是说要把两个字符串变为一模一样。
首先个数一定要一样!
参考代码:
x1=strlen(a);
x2=strlen(b);
x=fabs(x1-x2);
x求的是两个字符串相差的个数。
相当于前两个条件
1. 删除一个字符;
2. 插入一个字符;
然后算出两个字符串中相同字符的个数。
参考代码:
for(i=0;i
{
for(j=0;j
{
if(a[i]==b[j])number++;
}
}
下一步就可以用两个字符串中的较少的字符串的数量减取相同的字符的数量。
相当于第三个条件:
3. 将一个字符改为另一个字符。
参考代码:
min=(x1>x2?x2:x1);
y=min-number;
最后得到x+y的总和就是答案,即最少字符操作次数。
注意事项:
因为不知道x1>x2还是x2>x1,因此要用fabs(x1-x2)得到绝对值,当然用abs(x1-x2)也是一样的。头文件:#include
求a,b两个字符串要用到strlen,因此头文件要加上:#include
x1>x2?x1:x2的意思可能一些小白还不知道,这里解释一下,如果x1>x2得到x1,否则x2,就是说求max,也就是两个中的最大值。这样写比较方便操作。
当然也可以用if语句来做,稍微长一些。
((x1>x2?x1:x2)>x3)?(x1>x2?x1:x2):x3这个语句可以求3个数中的最大值。
最后最重要的是点个赞~
参考代码:
#include
#include
#include
int main()
{
char a[200],b[200];
int i,j,x1,x2,x,y,number=0,min;
scanf("%s\n%s",a,b);
getchar();
x1=strlen(a);
x2=strlen(b);
x=fabs(x1-x2);
for(i=0;i
{
for(j=0;j
{
if(a[i]==b[j])number++;
}
}
min=(x1>x2?x2:x1);
y=min-number;
printf("%d\n",x+y);
return 0;
}
评论区有小伙伴提出了字符相同的情况,于是我加了一点代码,如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
char a[200],b[200];
int i,j,x1,x2,x,y,number=0,min,number1=0;
scanf("%s\n%s",a,b);
x1=strlen(a);
x2=strlen(b);
getchar();
x=fabs(x1-x2);
if(x!=0)
{
for(i=0;i<(x1>x2?x1:x2);i++)
{
for(j=0;j<(x1>x2?x1:x2);j++)
{
if(a[i]==b[j])number++;
}
}
min=(x1>x2?x2:x1);
y=min-number;
printf("%d\n",x+y);
}
else if(x==0)
{
for(i=0;i<x1;i++)
{
if(a[i]!=b[i])number1++;
}
printf("%d",number1);
}
return 0;
}
这样就解决了评论区中abcd和acbd输出为0的情况,正确答案应该是2.
已经修改bug!
0.0分
6 人评分
char p1[8],p2[8]; int i,j,l,sum=0; for(i=0;i<7;i++) scanf("%c",&p1[i]); for(j=0;j<5;j++) scanf("%c",&p2[j]); for(i=0;i<8;i++) { for(j=0;j<8;j++) { if(p1[i]==p2[j]) sum++; } } l=strlen(p1); printf("%d",l-sum); 为什么这个解不可以
这么解应该存在bug吧,比如abcd,acbd,字符数量相同,没有不同字符,用这个代码是不是就输出0了。
#include<stdio.h> int main() { int a[100]; int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); int l=2; printf("%d",a+1); return 0; } 为啥会乱码
落叶无情 2021-11-21 19:36:25 |
因为a+1是指a[1]的地址不是a[1]的值,用指针就可以*(a+i)这种,或者下标法a[i],建议新手还是用下标法a[i]简单明了
C二级辅导-计负均正 (C语言代码)浏览:607 |
川哥的吩咐 (C语言代码)浏览:926 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:549 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1090 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:562 |
C二级辅导-阶乘数列 (C语言代码)浏览:736 |
众数问题 (C语言代码)浏览:911 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:583 |
IP判断 (C语言描述,蓝桥杯)浏览:1118 |
Cylinder (C语言描述+详细分析)浏览:3374 |
落叶无情 2021-12-05 19:42:31 |
首先两个字符串可能相同,也可能不同,你默认P1>P2的长度,如果P2长的话,结果为0也可能,但肯定得修改。而且题目的字符串数组的长度也没有定义,你这个直接把题目作死了