本文主要是介绍MC0206 小码哥的英语,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
小码哥在做英语单选题的时候突然想到了一个很有意思的问题:单选题的答案都是A或者B,那么很多道题目的答案组成的就是一个A和B组成的字符串。如果两个相邻的题目的答案是相同的,小码哥就可以修改这两个题目的答案,改成都是A、都是B或者一个是A另外一个是B,小码哥把这个定义为一次操作。那么对于任意一个答案字符串,最少需要多少次操作,才能使得它满足:任意相邻的题目的答案都不同。
格式
输入格式:
第一行包含一个数字 n (1≤≤1000),表示字符串的个数;
后面的 n 行,每一行表示一个长度为L(1≤L≤10000)的,由字符A和B随机组成的字符串。
输出格式:
输出有多行,每一行表示对应字符串需要的最少的操作次数T(0≤T≤10000)。
样例 1
输入:
2 AAABAB AABBBAB
输出:
1 2
思路:只有两种情况:
①以A为首:ABABABAB...
②以B为首:BABABABA...
所以根据这两种情况分别求次数,取最小即可
#include <iostream>
using namespace std;
const int N = 10005;
int n;
int main()
{cin >> n;while (n--){string str;cin >> str;int ans1 = 0, ans2 = 0; // ABABAB BABABAfor (int i = 0; i < str.size(); i++){if ((i + 1) % 2 == 0){if (str[i] != 'B')ans1++;}else if ((i + 1) % 2 != 0){if (str[i] != 'A')ans1++;}}for (int i = 0; i < str.size(); i++){if ((i + 1) % 2 != 0){if (str[i] != 'B')ans2++;}else if ((i + 1) % 2 == 0){if (str[i] != 'A')ans2++;}}cout << min(ans1, ans2) << endl;}
}
这篇关于MC0206 小码哥的英语的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!