# 翻硬币

**问题描述**

小明正在玩一个“翻硬币”的游戏。

桌上放着排成一排的若干硬币。我们用 * 表示正面，用 o 表示反面（是小写字母，不是零）。

比如，可能情形是：```**oo***oooo```

如果同时翻转左边的两个硬币，则变为：```oooo***oooo```

现在小明的问题是：如果已知了初始状态和要达到的目标状态，每次只能同时翻转相邻的两个硬币,那么对特定的局面，最少要翻动多少次呢？

我们约定：把翻动相邻的两个硬币叫做一步操作，那么要求：

**输入格式**

两行等长的字符串，分别表示初始状态和要达到的目标状态。每行的长度<1000

**输出格式**

一个整数，表示最小操作步数。

**样例输入1**

```
**********
o****o****
```
**样例输出1**

```
5
```
**样例输入2**

```
*o**o***o***
*o***o**o***
```
**样例输出2**

```
1
```

以下选项<span style="color:red">错误</span>的是？

## aop

### before

```cpp
#include <bits/stdc++.h>
using namespace std;
```
### after

```cpp

```

## 答案

```cpp
char a[1005], b[1005];
int len, i = 0, ans = 0;

int main()
{
    scanf("%s%s", a, b);
    len = strlen(a);
    while (i < len)
    {
        if (a[i] != b[i])
        {
            a[i + 1] = (a[i + 1] == '*' ? '*' : 'o');
            ++ans;
        }
        ++i;
    }
    printf("%d\n", ans);
}
```
## 选项


### A

```cpp
char a[1005], b[1005];

struct node
{
    char ff[1005];
    int step;
};

void bfs()
{

    queue<node> q;
    node ll;
    strcpy(ll.ff, a);
    ll.step = 0;
    q.push(ll);
    while (!q.empty())
    {
        node tmp;
        tmp = q.front();
        q.pop();
        if (!strcmp(tmp.ff, b))
        {
            printf("%d\n", tmp.step);

            return;
        }
        int num = strlen(tmp.ff);
        for (int i = 0; i < num - 1; i++)
        {
            node now;
            now = tmp;
            now.step++;
            if (now.ff[i] == '*')
                now.ff[i] = 'o';
            else
                now.ff[i] = '*';
            if (now.ff[i + 1] == '*')
                now.ff[i + 1] = 'o';
            else
                now.ff[i + 1] = '*';

            q.push(now);
        }
    }
}

int main()
{

    while (~scanf("%s", a))
    {
        scanf("%s", b);

        bfs();
    }

    return 0;
}
```

### B

```cpp
int main()
{
    string a;
    string b;
    cin >> a >> b;
    int cnt = 0;
    for (int i = 0; i < a.length(); i++)
    {
        if (a[i] != b[i])
        {
            if (a[i] == '*')
            {
                a[i] = 'o';
            }
            else
            {
                a[i] = '*';
            }

            if (a[i + 1] == '*')
            {
                a[i + 1] = 'o';
            }
            else
            {
                a[i + 1] = '*';
            }
            cnt++;
        }
    }
    cout << cnt;
    return 0;
}
```

### C

```cpp
int main()
{
    string a, b;
    cin >> a >> b;
    int a1 = a.size(), b1 = b.size(), ans = 0;
    for (int i = 0; i < a1; i++)
    {
        if (a[i] == b[i])
        {
            continue;
        }
        else
        {
            ans++;
            a[i] = b[i];
            if (a[i + 1] == '*')
            {
                a[i + 1] = 'o';
            }
            else
            {
                a[i + 1] = '*';
            }
        }
    }
    cout << ans << endl;
    return 0;
}
```
