蓝桥杯试题 历届试题 翻硬币

蓝桥杯试题 历届试题 翻硬币

在这里插入图片描述
在这里插入图片描述
思路:由后往前依次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;
}

若有错误,麻烦请指出!谢谢啦!

发布了13 篇原创文章 · 获赞 5 · 访问量 494

猜你喜欢

转载自blog.csdn.net/qq_44410340/article/details/104928661