思路:
要求反转数量,每一次要反转相邻的两个硬币,因为范围不是很大,可以直接暴力。为了方便转换,我把 ‘*’ 赋值为1,‘o’ 赋值为0。在反转时直接乘以-1即可。
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
char s1[110];
char s2[110];
int ss1[110];
int ss2[110];
int cnt;
int main()
{
scanf("%s",&s1);
getchar();
scanf("%s",&s2);
int len = strlen(s1);
// cout<<len<<endl;
for(int i=0;i<len;i++){
if(s1[i] == '*') ss1[i] = 1;
if(s1[i] == 'o') ss1[i] = -1;
if(s2[i] == '*') ss2[i] = 1;
if(s2[i] == 'o') ss2[i] = -1;
}
// for(int i=0;i<len;i++){
// cout<<ss1[i]<<" ";
// }
// cout<<endl;
// for(int i=0;i<len;i++){
// cout<<ss2[i]<<" ";
// }
for(int j=0;j<len;j++){
if(ss1[j] != ss2[j]){
ss1[j] = ss2[j];
ss1[j+1] = -1 * ss1[j+1];
cnt++;
}
}
printf("%d",cnt);
return 0;
}
代码2:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
int n;
//记录初始状态和目标状态
char start[110],endd[110];
void turn(int i){
if(start[i] == '*') start[i] = 'o';
else start[i] = '*';
}
int main()
{
cin>>start>>endd;
n = strlen(start);
int res = 0;
for(int i=0;i<n;i++){
if(start[i] != endd[i]){
turn(i);
turn(i+1);
res++;//反转数加1
}
}
cout<<res<<endl;
return 0;
}