TH9 牛牛扔牌

描述

现在有n张扑克牌,每张扑克牌都有点数和花色两部分组成。点数为‘1’-‘9’的正整数,花色为'C','D','H','S''其中的一个,分别表示梅花、方块、红桃、黑桃。现在想按一定的顺序把这n张牌扔掉。扔牌顺序的规则如下1.:

1.如果现在还剩素数张牌,则将牌顶的牌扔掉

2.如果现在还剩非素数张牌,则将牌底的牌扔掉

求扔牌顺序是什么,请返回扔牌顺序的字符串

示例1

输入:

"3C8D6H3D"

复制返回值:

"3D3C8D6H"

复制说明:


开始n=4,为非素数,扔掉牌底的牌3D

n=3,为素数,扔掉牌顶的牌3C

n=2,为素数,扔掉牌顶的牌8D

n=1,为非素数,扔掉牌底的牌6H

示例2

输入:

"8S8S8S8S8S8S8S"

返回值:

"8S8S8S8S8S8S8S"

说明:

因为全是8S,所以扔牌顺序的每一张牌也都是8S 

备注:

对于100%的数据,1≤n≤10

以下是C++代码实现:


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

using namespace std;

class Solution {
public:
    /**
     * 
     * @param x string字符串 字符串从前到后分别是从上到下排列的n张扑克牌
     * @return string字符串
     */
    string Orderofpoker(string x) {
        vector<string> cards;
        string temp;
        for (int i = 0; i < x.size(); i++) {
            if (i == x.size() - 1 || x[i] != x[i + 1]) {
                temp += x[i];
                cards.push_back(temp);
                temp = "";
            } else {
                temp += x[i];
            }
        }
        sort(cards.begin(), cards.end(), [](string a, string b) {
            if (a.size() == b.size()) {
                return a < b;
            } else {
                return a.size() > b.size();
            }
        });
        string result = "";
        for (string card : cards) {
            result += card;
        }
        return result;
    }
};

在这个实现中,我们定义了一个名为Solution的类,其中包含一个名为Orderofpoker的公共方法。该方法接收一个字符串参数x,表示从上到下排列的n张扑克牌,并返回一个字符串,表示扔牌顺序的字符串。

在方法中,首先定义了一个名为cardsvector<string>,用于存储每张牌。然后定义了一个名为temp的字符串,用于存储当前正在处理的牌。接下来,使用一个for循环遍历输入字符串x中的每个字符,如果当前字符与下一个字符不同,则表示当前牌已经处理完毕,将其添加到cards中,并清空temp。否则,将当前字符添加到temp中。

接下来,使用sort函数对cards进行排序,排序规则如下:

  1. 如果两张牌的点数相同,则按照花色的字典序进行排序。
  2. 如果两张牌的点数不同,则按照点数从大到小的顺序进行排序。

最后,使用一个for循环遍历cards中的每张牌,将它们按照排序后的顺序添加到result字符串中,并返回result

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清贫码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值