落叶无情


私信TA

用户名:uq_84474833856

访问量:1860

签 名:

等  级
排  名 2445
经  验 2220
参赛次数 0
文章发表 3
年  龄 18
在职情况 学生
学  校
专  业 软件工程

  自我简介:

解题思路:

题目的最终结果:

对任给的两个字符串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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

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);
为什么这个解不可以
2021-12-05 15:37:53
这么解应该存在bug吧,比如abcd,acbd,字符数量相同,没有不同字符,用这个代码是不是就输出0了。
2021-11-25 20:04:08
#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 00:21:13
  • «
  • 1
  • »