请用c++编写程序:金钩钓鱼是一个非常经典的扑克牌游戏,通常是多人一起玩的游戏,但由于小元过于无聊,今天他自己玩起了金钩钓鱼。 游戏规则如下:依次摆放扑克牌,若与之前的某张扑克牌点数相同,则将从当前扑克牌到该相同扑克牌之间的所有扑克牌都清除,若遇到“金钩”(即点数 J ),则将当前桌面所有扑克牌都清除。但若摆放“金钩”时之前并无卡牌,则“金钩”要留到桌面上。请问当所有牌都摆放完成后,桌面的情况是什么样的呢? 输入描述 输入格式 输入一个字符串 s ( s 的长度小于 100 ),表示扑克序列(扑克牌点数包含 1 ~ 9 以及 J 、 Q 、 K )。 输出描述 输出格式 输出桌面最终的摆放结果。
时间: 2024-04-08 22:35:17 浏览: 125
C++程序设计扑克牌游戏
4星 · 用户满意度95%
以下是用C++编写的解决方案:
```cpp
#include <iostream>
#include <stack>
#include <string>
std::string clearCards(const std::string& cards) {
std::stack<char> stk;
for (char card : cards) {
if (card == 'J') {
while (!stk.empty()) {
stk.pop();
}
} else {
if (!stk.empty() && stk.top() == card) {
while (!stk.empty() && stk.top() != card) {
stk.pop();
}
} else {
stk.push(card);
}
}
}
std::string result;
while (!stk.empty()) {
result = stk.top() + result;
stk.pop();
}
return result;
}
int main() {
std::string cards;
std::cin >> cards;
std::string result = clearCards(cards);
std::cout << result << std::endl;
return 0;
}
```
使用一个栈来模拟桌面上扑克牌的摆放情况。遍历输入的字符串,如果当前扑克牌是"J",则清除栈中所有元素;如果当前扑克牌与栈顶元素相同,则一直弹出栈顶元素直到栈为空或者遇到不相同的扑克牌;否则将当前扑克牌入栈。最后将栈中的元素按照逆序拼接,即为最终的摆放结果。
阅读全文