题目背景
小明正在玩一个“翻硬币”的游戏。
题目描述
桌上放着排成一排的若干硬币。我们用 *
表示正面,用 o
表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo
,如果同时翻转左边的两个硬币,则变为 oooo***oooo
。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
输入格式
两行等长字符串,分别表示初始状态和要达到的目标状态,每行长度小于 10001000。
数据保证一定存在至少一种方案可以从初始状态和要达到的目标状态。
输出格式
一个整数,表示最小操作步数。
输入输出样例
输入 #1复制
********** o****o****
输出 #1复制
5
输入 #2复制
*o**o***o*** *o***o**o***
输出 #2复制文章来源:https://www.toymoban.com/news/detail-796592.html
1
说明/提示
source:蓝桥杯 2013 省 B 组 H 题文章来源地址https://www.toymoban.com/news/detail-796592.html
AC代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int cnt=0;
string s1,s2;
cin>>s1>>s2;
for(int i=0; i<s1.size(); i++)
{
if(s1[i]!=s2[i])
{
if(s1[i]=='o')
{
s1[i]='*';
}
else if(s1[i]=='*')
{
s1[i]='o';
}
if(s1[i+1]=='o')
{
s1[i+1]='*';
}
else if(s1[i+1]=='*')
{
s1[i+1]='o';
}
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}
到了这里,关于[蓝桥杯 2013 省 B] 翻硬币的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!