XiaoMingは「コインフリップ」ゲームをプレイしています。
テーブルの上にいくつかのコインが並んでいます。*を使用して前面を表し、oを使用して背面を表します(ゼロではなく小文字)。
たとえば、考えられる状況は次のとおりです。**oo***oooo
左側の2つのコインを同時に裏返すと、次のようになります。oooo***oooo
Xiao Mingの質問は、初期状態と到達する目標状態がわかっていて、同時に2つの隣接するコインしかフリップできない場合、特定の状況でフリップが最も少ない回数は何回ですか。
私たちは同意します:2つの隣接するコインを回すことはワンステップ操作と呼ばれます。
入力フォーマット
同じ長さの2つの文字列は、初期状態と到達するターゲット状態を表します。
出力フォーマット
操作ステップの最小数を表す整数
データ範囲
入力文字列の長さは100を超えません。
データは、答えが解決可能でなければならないことを保証します。
入力例1:
**********
o****o****
サンプル出力1:
5
入力例2:
*o**o***o***
*o***o**o***
出力サンプル2:
1
ACコード:
#include<iostream>
using namespace std;
char a[110];//原串
char b[110];//目标串
int length;//串长度
int ans;//答案
void turn(int x)//翻位于x处的硬币
{
if(a[x]=='*') a[x]='o';
else a[x]='*';
}
int main()
{
cin>>a;
cin>>b;
int i=0;
while(a[i]!='\0')//计算串长度
{
++length;
++i;
}
for(int j=0;j<length-1;++j)//推导步骤,如果当前位和目标串不同,就需要翻转
{
if(a[j]!=b[j]){turn(j);turn(j+1);++ans;}
}
cout<<ans<<endl;
return 0;
}