大一小白的第一篇博客,都是基于C语言完成的。
作为一道上古蓝桥杯省赛B组题,这道题的难度还是很简单的(或者说我思考的角度比较简单)
通过观察案例不难发现可以将问题转化为“两个改变的字符间有几个没改变的字符+1”
举个栗子:
***oo**
*o**o**
可以发现改变的2个字符中间只有1个,所以输出的是1+1=2
值得注意的是,如果有多段字符组合,需要将他们相加
如:
***oo** **********
*o**o** o****o****
改变的字符有(1+1)+(4+1)=7
附上我的代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<stdbool.h>
//我个人的习惯:头文件全部都整上去
int main()
{
int sum=0,i=0;//sum用于计数
bool tmp=0;//tmp是关键,用于判断两个字符是否发生变化,bool类型不常用,可以积累一下
char s1[1000]={'\0'};
char s2[1000]={'\0'};
scanf("%s",&s1);
scanf("%s",&s2);
for(;i<strlen(s1);i++)
{
if(s1[i]!=s2[i])
{
tmp=!tmp;//判断改变字符的头和尾
}
if(tmp==1)
{
sum++;
}
}
printf("%d",sum);
return 0;
}
附上我自己的一些小积累:
开字符数组时记得将字符数组初始化为\0
用bool类型可以更好的实现判断,不过其实也可以用两个if语句来实现判断、
对于头文件跟string函数的使用需要留意,别把c++和java的一些语法搞混了(在写strlen时还写成了length.s1)