思路一:模拟翻转过程 直到所有都相同
#include<stdio.h>
#include<string.h>
char beg[10002];
char des[10002];
int main()
{
int ans = 0;
scanf("%s",beg);
scanf("%s",des);
int len = strlen(beg);
char t;
for(int i = 0; i < len; ++i){
if(beg[i] != des[i]){
t = des[i];
beg[i] = t;
if(beg[i+1] == '*')
beg[i+1] = 'o';
else
beg[i+1] = '*';
++ans;
}
}
printf("%d",ans);
return 0;
}
思路二:
记录不相同的位置,规律:相邻两个不相同硬币的位置差即为这两个之间需要翻转的次数
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char a[1000+5],b[1000+5];
int ans=0,pos[1000+5],p=0;
scanf("%s%s",a,b);
int l=strlen(a);
for(int i=0; i<l; i++)
if(a[i]!=b[i])
pos[p++]=i;
for(int i=1; i<p; i+=2)//这里 是加2
ans+=pos[i]-pos[i-1];
printf("%d\n",ans);
return 0;
}