要实现遇到三个相同颜色的小球时都删除,您可以对消除部分进行修改。在当前判断条件if (!stack.empty() && stack.back() == ball)的基础上添加一个新的判断条件,用来检查是否已经有两个相邻的小球与当前小球颜色相同。如果是,则连同当前小球一起将栈顶的两个元素弹出。
以下是修改后的代码:
#include <iostream>
#include <vector>
#include <string>
void eliminateBalls(std::vector<std::string>& balls) {
bool eliminated;
do {
eliminated = false;
for (std::string& row : balls) {
std::vector<char> stack; // 使用栈来进行消除操作
for (char ball : row) {
if (!stack.empty() && stack.back() == ball) {
stack.pop_back(); // 如果当前小球与栈顶小球颜色相同,则消除栈顶小球
eliminated = true;
if (!stack.empty() && stack.back() == ball) {
stack.pop_back(); // 如果之前有两个相邻的颜色相同的小球,则再次消除
eliminated = true;
}
}
else {
stack.push_back(ball); // 否则,将当前小球加入栈中
}
}
std::string result(stack.begin(), stack.end()); // 消除后的小球序列
row = result;
}
} while (eliminated);
}
int main() {
int t;
std::cin >> t; // 行数
std::vector<std::string> balls(t);
for (int i = 0; i < t; i++) {
std::cin >> balls[i];
}
// 消除小球
eliminateBalls(balls);
for (const std::string& result : balls) {
if (result.empty()) {
std::cout << "Congratulations!" << std::endl;
}
else {
std::cout << result << std::endl;
}
}
return 0;
}
通过添加新的判断条件,代码会在遇到三个相同颜色的小球时将它们都删除。
内容由零声教学AI助手提供,问题来源于学员提问




