请用c++动态数组知识编写程序:描述 金钩钓鱼 金钩钓鱼是一个非常经典的扑克牌游戏,通常是多人一起玩的游戏,但由于小元过于无聊,今天他自己玩起了金钩钓鱼。 游戏规则如下:依次摆放扑克牌,若与之前的某张扑克牌点数相同,则将从当前扑克牌到该相同扑克牌之间的所有扑克牌都清除,若遇到“金钩”(即点数 J ),则将当前桌面所有扑克牌都清除。但若摆放“金钩”时之前并无卡牌,则“金钩”要留到桌面上。请问当所有牌都摆放完成后,桌面的情况是什么样的呢? 输入描述 输入格式 输入一个字符串 s ( s 的长度小于 100 ),表示扑克序列(扑克牌点数包含 1 ~ 9 以及 J 、 Q 、 K )。 输出描述 输出格式 输出桌面最终的摆放结果。 用例输入 1 5233J6989Q 用例输出 1 6Q
时间: 2024-04-08 14:35:17 浏览: 145
以下是使用C++动态数组的解决方案:
```cpp
#include <iostream>
#include <vector>
#include <string>
std::string clearCards(const std::string& cards) {
std::vector<char> table;
for (char card : cards) {
if (card == 'J') {
if (!table.empty()) {
table.clear();
}
} else {
if (!table.empty() && table.back() == card) {
while (!table.empty() && table.back() != card) {
table.pop_back();
}
} else {
table.push_back(card);
}
}
}
std::string result(table.begin(), table.end());
return result;
}
int main() {
std::string cards;
std::cin >> cards;
std::string result = clearCards(cards);
std::cout << result << std::endl;
return 0;
}
```
使用`std::vector<char>`作为动态数组来模拟桌面上扑克牌的摆放情况。遍历输入的字符串,如果当前扑克牌是"J",且桌面上已有卡牌,则清空动态数组;如果当前扑克牌与动态数组的最后一张卡牌相同,则一直弹出动态数组的最后一张卡牌直到动态数组为空或者遇到不相同的扑克牌;否则将当前扑克牌添加到动态数组的末尾。最后将动态数组转换为字符串,即为最终的摆放结果。
阅读全文