以下是解决此问题的 C++ 代码: ```cpp #include <iostream> #include <string> #include <algorithm> // 检查字符串是否是红蓝相间的 bool isAlternating(const std::string& s) { for (int i = 1; i < s.length(); ++i) { if (s[i] == s[i - 1]) { return false; } } return true; } // 解决问题的函数 int solve(const std::string& a) { int n = a.length(); // 尝试将前 i 个珠子翻转到末尾 for (int i = 0; i < n; ++i) { std::string newStr = a.substr(i) + a.substr(0, i); if (isAlternating(newStr)) { return i; } } return -1; } int main() { int n; std::string a; std::cin >> n >> a; int result = solve(a); std::cout << result << std::endl; return 0; } ``` 代码解释 1. `isAlternating` 函数:此函数用于检查给定的字符串是否是红蓝相间的。它遍历字符串,如果发现相邻的两个字符相同,则返回 `false`,否则返回 `true`。 2. `solve` 函数:该函数尝试将前 `i` 个珠子翻转到末尾,形成新的字符串,然后检查新字符串是否是红蓝相间的。如果是,则返回 `i`。如果遍历完所有可能的 `i` 都没有找到符合条件的排列,则返回 -1。 3. `main` 函数:读取输入的珠子数量 `n` 和珠子颜色的字符串 `a`,调用 `solve` 函数得到结果并输出。 额外注意的逻辑点 1. 在 `isAlternating` 函数中,遍历字符串时要从索引 1 开始,因为索引 0 前面没有字符。 2. 在 `solve` 函数中,`substr` 函数的使用要注意参数的含义,第一个参数是起始位置,第二个参数是截取的长度。 3. 当输入的字符串本身就满足红蓝相间时,`solve` 函数会返回 0,这是一种特殊情况,需要正确处理。 [2025-07-30 17:00:35 | AI写代码神器 | 546点数解答]