原题链接:蓝桥杯历届试题-翻硬币
解题思路:
感觉这个题出的都有问题,它只给出了特殊的正确的情况,没有一些错的,比如:这个串*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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复