网站欣赏与创建网页,体育器材网站建设方案,石家庄网站建设今天改网名,有趣网站开发题目背景
小明正在玩一个“翻硬币”的游戏。
题目描述
桌上放着排成一排的若干硬币。我们用 * 表示正面#xff0c;用 o 表示反面#xff08;是小写字母#xff0c;不是零#xff09;#xff0c;比如可能情形是 **oo***oooo#xff0c;如果同时翻转左边的两个硬币用 o 表示反面是小写字母不是零比如可能情形是 **oo***oooo如果同时翻转左边的两个硬币则变为 oooo***oooo。现在小明的问题是如果已知了初始状态和要达到的目标状态每次只能同时翻转相邻的两个硬币那么对特定的局面最少要翻动多少次呢
输入格式
两行等长字符串分别表示初始状态和要达到的目标状态每行长度小于 1000。
数据保证一定存在至少一种方案可以从初始状态和要达到的目标状态。
输出格式
一个整数表示最小操作步数。
输入输出样例
输入 #1复制
**********
o****o****
输出 #1复制
5
输入 #2复制
*o**o***o***
*o***o**o***
解析这题用的知识就是两个等长字符串的匹配问题博主本来看解析审题不认真还以为每个数据只会有一段需要翻硬币匹配结果就出现了下面的错误代码样例都是只有一段需要匹配所以样例都过了但是一测0分好险还好不是正式比赛
#includebits/stdc.h
using namespace std;
int main()
{string stand;cinstand;string nu;cinnu;int cnt0;for(int i0;istand.size();i){if(nu[i]!stand[i]){if(nu[i1]!stand[i1]){cnt;coutcnt;return 0;//因为我以为只需要一段处理完直接结束代码}else{if(nu[i1]*){cnt;nu[i1]o;}else if(nu[i1]o){cnt;nu[i1]*;}}}}return 0;
} 自己想了许久还没想出来最后还是问舍友才解决了的其实也简单就是需要把串全部遍历了不能提前结束
#includebits/stdc.h
using namespace std;
int main()
{string stand;cinstand;string nu;cinnu;int cnt0;for(int i0;istand.size();i){if(nu[i]!stand[i])//检测到不同开始翻硬币{nu[i1](nu[i1]*?o:*);//因为遍历过的硬币不需要再用到所以直接翻下一个就行建议不会这种“ ? : ” 写法的学习一下有时候能很大地精简代码cnt;}}coutcnt;return 0;//修改之后发现原来正确的代码比我的错误代码还要精简很多
自我检讨尤其是蓝桥这种比赛制度不怕题目简单就怕自己掉以轻心