PREV-6. 翻硬币

  • Post author:
  • Post category:其他



问题描述

⼩明正在玩⼀个





翻硬币





的游戏。

桌上放着排成⼀排的若⼲硬币。我们⽤


*


表示正⾯,⽤


o


表示反⾯(是⼩写字⺟,不是零)。

⽐如,可能情形是:


**oo***oooo

如果同时翻转左边的两个硬币,则变为:


oooo***oooo

现在⼩明的问题是:如果已知了初始状态和要达到的⽬标状态,每次只能同时翻转相邻的两个硬币


,


那么对特定的局⾯,最少要翻动多少次呢?

我们约定:把翻动相邻的两个硬币叫做⼀步操作,那么要求:

输⼊格式

两⾏等⻓的字符串,分别表示初始状态和要达到的⽬标状态。每⾏的⻓度


<1000

输出格式

⼀个整数,表示最⼩操作步数。

样例输⼊


1

**********

o****o****

样例输出


1

5

样例输⼊


2

*o**o***o***

*o***o**o***

样例输出


2

1
从前往后,如果不一致就同时翻转这一枚硬币和下一枚硬币
#include<iostream>
#include<algorithm>
#include<math.h>
#include<string>
using namespace std;
int main()
{
	int cnt=0;
	string s1,s2;
	cin>>s1>>s2;
	for(int i=0;i<s1.length();i++)
	{
		if(s1[i]!=s2[i]) 
		{
			if(s1[i]=='o') s1[i]='*';
			else s1[i]='o';
			if(s1[i+1]=='o') s1[i+1]='*';
			else s1[i+1]='o';
			cnt++;
		}
	}
	cout<<cnt;
}



版权声明:本文为m0_52547988原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。