蓝桥杯试题 历届试题 翻硬币
思路:由后往前依次a[i], b[i] 比较,若相同则不翻,前进一位继续比较,若不同,则翻硬币(此时只需翻前面一个硬币即a[i - 1],当然后面一个即a[i]也需要翻转,但是由于反转后自然与原始状态的相同,则可以不写出来),只至反转到第一位。
#include <iostream>
using namespace std;
string a, b;//a->原始状态, b->反转之后的状态
int F(int n)
{
if (n == 0)
{
return 0; //比较完毕,结束反转
}
if (a[n] == b [n])//相同
{
return F(n - 1);
}
else//不同
{
b[n - 1] = b[n - 1] == '*' ? 'o' : '*';//反转硬币
return F(n - 1) + 1;
}
}
int main()
{
int n;
cin >> a >> b;
n = a.length();
cout << F(n - 1);
return 0;
}
当然也阔以用循环做
#include <iostream>
using namespace std;
int main()
{
string a, b;
int i, sum = 0;
cin >> a >> b;
for (i = a.length() - 1 ; i > 0 ; i--)
{
if (a[i] != b[i])
{
b[i - 1] = b[i - 1] == '*' ? 'o' : '*';
sum++;
}
}
cout << sum;
}
若有错误,麻烦请指出!谢谢啦!