【编程题目 |200分】 斗地主之顺子【华为OD机试 2024 Q4考试题 E卷】
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,
编码后请点击”保存并调试“按钮进行代码提交。
■ 题目描述
【斗地主之顺子】
- 在斗地主扑克牌游戏中, 扑克牌由小到大的顺序为:3,4,5,6,7,8,9,10,J,Q,K,A,2,玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。
- 其中顺子的出牌规则为:由至少5张由小到大连续递增的扑克牌组成,且不能包含2。
- 例如:{3,4,5,6,7}、{3,4,5,6,7,8,9,10,J,Q,K,A}都是有效的顺子;而{J,Q,K,A,2}、 {2,3,4,5,6}、{3,4,5,6}、{3,4,5,6,8}等都不是顺子。
- 给定一个包含13张牌的数组,如果有满足出牌规则的顺子,请输出顺子。
- 如果存在多个顺子,请每行输出一个顺子,且需要按顺子的第一张牌的大小(必须从小到大)依次输出。
- 如果没有满足出牌规则的顺子,请输出No。
输入描述
13张任意顺序的扑克牌,每张扑克牌数字用空格隔开,每张扑克牌的数字都是合法的,并且不包括大小王:
2 9 J 2 3 4 K A 7 9 A 5 6
不需要考虑输入为异常字符的情况
输出描述
组成的顺子,每张扑克牌数字用空格隔开:
3 4 5 6 7
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
2 9 J 2 3 4 K A 7 9 A 5 6
输出
3 4 5 6 7
说明
13张牌中,可以组成的顺子只有1组:3 4 5 6 7。
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
2 9 J 10 3 4 K A 7 Q A 5 6
输出
3 4 5 6 7
9 10 J Q K A
说明
13张牌中,可以组成2组顺子,从小到大分别为:3 4 5 6 7 和 9 10 J Q K A
示例3 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
2 9 9 9 3 4 K A 10 Q A 5 6
输出
No
说明
13张牌中,无法组成顺子。
代码实现
Python
input_list = str(input()).split(" ") instead = [] for i in input_list: if i.isdigit() and i != '2': instead.append(int(i))
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看C++解法一
#include<bits/stdc++.h> using namespace std; class Poker { public: int currLastValue{}; vector<int> allData; ~Poker() = default; }; void SplitString(string input, vector <string> &output, string pattern) { string::size_type pos; input += pattern; for (int i = 0; i < input.size(); i++) { pos = input.find(pattern, i); if (pos < input.size()) { string temp = input.substr(i, pos - i); if ((temp != pattern) && (!temp.empty())) { output.push_back(temp); } i = pos + pattern.size() - 1; } } }
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看C++解法二
#include<bits/stdc++.h> using namespace std; void SplitString(string input, vector <string> &output, string pattern) { string::size_type pos; input += pattern; for (int i = 0; i < input.size(); i++) { pos = input.find(pattern, i); if (pos < input.size()) { string temp = input.substr(i, pos - i); if ((temp != pattern) && (!temp.empty())) { output.push_back(temp); } i = pos + pattern.size() - 1; } } } typedef std::uint64_t hash_t; constexpr hash_t prime = 0x100000001B3ull; constexpr hash_t basis = 0xCBF29CE484222325ull;
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看JAVA
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] s = sc.nextLine().split(" "); List<Integer> list = new ArrayList<>();
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看JavaScript
剩余50%内容,订阅会员后查看
此处内容需要权限查看
会员免费查看