金钩钓鱼 暂无标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:简单 出题人: 描述 金钩钓鱼 金钩钓鱼是一个非常经典的扑克牌游戏,通常是多人一起玩的游戏,但由于小元过于无聊,今天他自己玩起了金钩钓鱼。 游戏规则如下:依次摆放扑克牌,若与之前的某张扑克牌点数相同,则将从当前扑克牌到该相同扑克牌之间的所有扑克牌都清除,若遇到“金钩”(即点数 J ),则将当前桌面所有扑克牌都清除。但若摆放“金钩”时之前并无卡牌,则“金钩”要留
时间: 2024-04-09 12:31:33 浏览: 105
下来,不进行清除操作。 游戏开始时,桌面上没有任何扑克牌。 现在给定小元依次摆放的扑克牌序列,请你计算最终桌面上剩余的扑克牌数量。
输入
输入包含多组测试数据。每组测试数据占一行,包含一个字符串 s,表示小元依次摆放的扑克牌序列。字符串 s 只包含大写字母 'A' 到 'K',其中 'J' 表示金钩。输入数据保证序列中的扑克牌数量不超过 105。
输出
对于每组测试数据,输出一行,包含一个整数,表示最终桌面上剩余的扑克牌数量。
样例输入
AABBCC
AJAJAJAJAJ
AKKAKKAKKAKKAKKA
样例输出
3
0
2
提示
对于第一组测试数据,第一张牌 A 不需要清除,第二张牌 A 与之前的一张 A 相同,清除这两张牌,剩下一张 B,最终桌面上剩余 3 张牌。
相关问题
请用c++动态数组知识编写程序:描述 金钩钓鱼 金钩钓鱼是一个非常经典的扑克牌游戏,通常是多人一起玩的游戏,但由于小元过于无聊,今天他自己玩起了金钩钓鱼。 游戏规则如下:依次摆放扑克牌,若与之前的某张扑克牌点数相同,则将从当前扑克牌到该相同扑克牌之间的所有扑克牌都清除,若遇到“金钩”(即点数 J ),则将当前桌面所有扑克牌都清除。但若摆放“金钩”时之前并无卡牌,则“金钩”要留到桌面上。请问当所有牌都摆放完成后,桌面的情况是什么样的呢? 输入描述 输入格式 输入一个字符串 s ( s 的长度小于 100 ),表示扑克序列(扑克牌点数包含 1 ~ 9 以及 J 、 Q 、 K )。 输出描述 输出格式 输出桌面最终的摆放结果。 用例输入 1 5233J6989Q 用例输出 1 6Q
以下是使用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",且桌面上已有卡牌,则清空动态数组;如果当前扑克牌与动态数组的最后一张卡牌相同,则一直弹出动态数组的最后一张卡牌直到动态数组为空或者遇到不相同的扑克牌;否则将当前扑克牌添加到动态数组的末尾。最后将动态数组转换为字符串,即为最终的摆放结果。
请用c++编写程序:金钩钓鱼是一个非常经典的扑克牌游戏,通常是多人一起玩的游戏,但由于小元过于无聊,今天他自己玩起了金钩钓鱼。 游戏规则如下:依次摆放扑克牌,若与之前的某张扑克牌点数相同,则将从当前扑克牌到该相同扑克牌之间的所有扑克牌都清除,若遇到“金钩”(即点数 J ),则将当前桌面所有扑克牌都清除。但若摆放“金钩”时之前并无卡牌,则“金钩”要留到桌面上。请问当所有牌都摆放完成后,桌面的情况是什么样的呢? 输入描述 输入格式 输入一个字符串 s ( s 的长度小于 100 ),表示扑克序列(扑克牌点数包含 1 ~ 9 以及 J 、 Q 、 K )。 输出描述 输出格式 输出桌面最终的摆放结果。
以下是用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",则清除栈中所有元素;如果当前扑克牌与栈顶元素相同,则一直弹出栈顶元素直到栈为空或者遇到不相同的扑克牌;否则将当前扑克牌入栈。最后将栈中的元素按照逆序拼接,即为最终的摆放结果。
阅读全文