最长的顺子 --- 华为od刷题

参考题库

华为OD机试备考攻略 以及题库目录分值说明 考点说明

题目描述

斗地主起源于湖北十堰房县,据说是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的,如今已风靡整个中国,并流行于互联网上。

牌型:单顺,又称顺子,最少5张牌,最多12张牌(3…A)不能有2,也不能有大小王,不计花色。

例如: 3-4-5-6-7-8,7-8-9-10-J-Q,3-4-5-6-7-8-9-10-J-Q-K-A

可用的牌 3<4<5<6<7<8<9<10<J<Q<K<A<2<B(小王)<C(大王),每种牌除大小王外有四种花色

(共有13×4+2张牌)

输入:

  1. 手上有的牌
  2. 已经出过的牌(包括对手出的和自己出的牌)

输出:

  • 对手可能构成的最长的顺子(如果有相同长度的顺子,输出牌面最大的那一个),
  • 如果无法构成顺子,则输出 NO-CHAIN。

输入描述

输入的第一行为当前手中的牌

输入的第二行为已经出过的牌

输出描述

最长的顺子

用例

输入 3-3-3-3-4-4-5-5-6-7-8-9-10-J-Q-K-A
4-5-6-7-8-8-8
输出 9-10-J-Q-K-A
说明
输入 3-3-3-3-8-8-8-8
K-K-K-K
输出 NO-CHAIN
说明 剩余的牌无法构成顺子

C++

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

// 将牌面映射为数字,方便处理
string mapToNumber(string pai) {
    if (pai == "J") return "11";
    if (pai == "11") return "J";
    if (pai == "Q") return "12";
    if (pai == "12") return "Q";
    if (pai == "K") return "13";
    if (pai == "13") return "K";
    if (pai == "A") return "14";
    if (pai == "14") return "A";
    return pai;
}

string getLongestChain(vector<string> myCards, vector<string> usedCards) {
    // 统计3~A的每张牌的数量,对应数组的索引3~14
    int cardCount[] = {0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0};

    // 从cardCount中去除myCards,剩下的就是对手的牌及数量
    for (string card : myCards) {
        int idx = stoi(mapToNumber(card));
   

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

华为OD机试刷题 文章被收录于专栏

华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。

全部评论
最长的顺子
点赞
送花
回复
分享
发布于 2023-12-13 20:25 江苏
mk
点赞
送花
回复
分享
发布于 2023-12-13 20:25 江苏
秋招专场
校招火热招聘中
官网直投
mk
点赞
送花
回复
分享
发布于 2023-12-13 20:54 江苏

相关推荐

3 3 评论
分享
牛客网
牛客企业服务