解题思路:
感觉这个题出的都有问题,它只给出了特殊的正确的情况,没有一些错的,比如:这个串*o**o***o*** 变成这个串  *o******o*** 的情况,因为如果根据题目中要改变相邻的两个字符的话,这个是变不成的。那么就简单了,只需要判断当前位置的两个串的对应位置字符是不是一样,如果不一样就把下面要变成的串的下一个位置的字符改变成正面/反面,也就是*/o,就行了,因为每次要改变两个字符的状态,所以当下一个位置的状态变了,当前位置的也就默认变了,就是说是从当前位置开始变化的,因为是要求最下次数的,所以操作一次就累加一次就行了。说的可能有点麻烦,看一下我的代码就懂了。
注意事项:
注意数组不要越界,遍历的时候要到i<s.size()-1处停止
参考代码:

#include<bits/stdc++.h>
using namespace std;

int main() {
	string s1,s2;
	cin>>s1>>s2;
	int cnt = 0;
	for(int i = 0; i<s1.size()-1;i++)
	{
		if(s1[i]!=s2[i]) {
			if(s2[i+1]=='*')
				s2[i+1]='o';
			else
				s2[i+1]='*';
			cnt++;			
		}
	}
	cout<<cnt<<endl;
	return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论