扑克牌游戏。唬牌

这篇具有很好参考价值的文章主要介绍了扑克牌游戏。唬牌。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Description
唬牌是一种扑克游戏,包含A,2,3,4,5,6,7,8,9,10,J,Q,K各四张。
有四个玩家参与这个游戏。
每一位玩家在游戏开始时都会有随机的13张牌。

在桌子上没有牌时,玩家选择任意一个点数x和一个数字y(y小于等于手中牌数且至少为一),并打出任意y张牌,并将这y张牌的背面朝上放在桌上,声称"这是y张x牌"。
当桌子上有牌时,玩家可以选择两种操作
(1)选择一个数字z,并打出任意z张牌,声称"这是z张x牌",注意:x与上一位打出牌的玩家所选的点数相同。
(2)质疑上一位玩家,然后他将翻转上一位玩家打出的牌,并检查上一位玩家的陈述是否正确。
若质疑成功(上一位玩家的陈述与其打出的牌不符),则被质疑者拿走桌上所有的牌。
若质疑失败,则质疑者拿走桌上所有的牌。
当一个玩家选择质疑,并且在某位玩家拿了桌上所有的牌之后,如果有玩家手里没有牌,那么我们就说这个玩家赢了这场游戏。
为了简化,这次您需要编写一个程序来模拟游戏过程,在程序中,用1代表A,11代表J,12代表Q,13代表K

Input

有t组样例

对于每一个样例

首先是4行,第i行包含13个数字,第i位玩家手中的牌

然后一行包含一个整数m (2 <=m <= 20),表示游戏回合数。接下来的m行,每一行都是以下格式之一:
1. ”S x y a1 a2 ……ay“,意思是当前的玩家出牌a1, a2,..., ay,并声明“这些是y张x牌”。
2. “! y a1 a2…,ay”,意思是当前的玩家选择不质疑,并打出y张牌a1, a2... ay,并声明“这些是y张牌x”,其中x保持不变(仍是上次说明的x)
3. “?“,表示当前玩家选择提出问题。 测试保证所有操作都是合法的。在这个过程中,没有人会赢。
Output

对于每一个样例

输出四行,第i位玩家在m回合后,非递减顺序牌。

每一行末尾有空格

末尾包含换行

Sample Input

1

8 12 12 9 3 10 13 11 12 4 10 2 1

2 10 13 9 9 3 12 4 6 13 3 11 13
11 1 10 5 7 4 5 6 7 7 5 6 9
4 1 11 2 1 8 8 3 2 6 5 8 7
5
S 1 2 2 3
! 1 2
! 1 1
! 2 1 1
?
Sample Output
1 1 1 1 2 2 3 4 8 9 10 10 11 12 12 12 13
3 3 4 6 9 9 10 11 12 13 13 13
4 5 5 5 6 6 7 7 7 9 10 11
2 2 3 4 5 6 7 8 8 8 11
 

 

分析,纯正暴力枚举,然后超时了,下面是超时代码,但是结果应该正确 

#include<iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
    int t,k,m,num=1,x,y;
    char temp;
    int temp1=0;
    int temp2;
    vector<int>p;vector<int>p1;vector<int>p2;vector<int>p3;vector<int>p4;
    scanf("%d",&t);
    while(t--){
        for(int i=0;i<13;i++){
            scanf("%d",&k);
            p1.push_back(k);
        }
        for(int i=0;i<13;i++){
            scanf("%d",&k);
            p2.push_back(k);
        }
        for(int i=0;i<13;i++){
            scanf("%d",&k);
            p3.push_back(k);
        }
        for(int i=0;i<13;i++){
            scanf("%d",&k);
            p4.push_back(k);
        }
        sort(p1.begin(),p1.end());sort(p2.begin(),p2.end());
        sort(p3.begin(),p3.end());sort(p4.begin(),p4.end());
        scanf("%d",&m);
        while(m--) {
            getchar();
           temp=getchar();
            if ((char)temp=='S'&&num%4==1) {
                scanf("%d%d", &x, &y);
                for (int i = 0; i < y; i++) {
                    scanf("%d", &k);
                    p.push_back(k);
                    temp2 = (lower_bound(p1.begin(), p1.end(), k) - p1.begin());
                    p1.erase(p1.begin() + temp2);
                }
                num++;
            }
            else if (temp=='!'&&num % 4 == 1) {
                scanf("%d",&y);
                for (int i = 0; i < y; i++) {
                    scanf("%d", &k);
                    p.push_back(k);
                     temp2 = (lower_bound(p1.begin(), p1.end(), k) - p1.begin());
                    p1.erase(p1.begin() + temp2);
                }
                num++;
            }
            else if (temp=='?'&&num % 4 == 1) {
                for (auto it = p.end() - 1; it >= p.end() - y; it--) {
                    if (*it == x) {
                        temp1++;
                    }
                }
                if (temp1 == y) {
                        for (auto it = p.begin(); it < p.end(); it++) {
                            p1.push_back(*it);
                        }
                    }
                if (temp1 != y) {
                    for (auto it = p.begin(); it < p.end(); it++){
                                p4.push_back(*it);
                    }
                }
                sort(p1.begin(),p1.end());sort(p2.begin(),p2.end());
                sort(p3.begin(),p3.end());sort(p4.begin(),p4.end());
                p.clear();
                num++;
                temp1=0;
            }
            else if (temp=='s'&&num%4==2) {
                scanf("%d%d", &x, &y);
                for (int i = 0; i < y; i++) {
                    scanf("%d", &k);
                    p.push_back(k);
                     temp2 = (lower_bound(p2.begin(), p2.end(), k) - p2.begin());
                    p2.erase(p2.begin() + temp2);
                }
                num++;
            }
            else if (temp=='!'&&num % 4 == 2) {
                scanf("%d",&y);
                for (int i = 0; i < y; i++) {
                    scanf("%d", &k);
                    p.push_back(k);
                     temp2 = (lower_bound(p2.begin(), p2.end(), k) - p2.begin());
                    p2.erase(p2.begin() + temp2);
                }
                num++;
            }
            else if (temp=='?'&&num % 4 == 2) {
                for (auto it = p.end() - 1; it >= p.end() - y; it--) {
                    if (*it == x) {
                        temp1++;
                    }
                }
                if (temp1 == y) {
                    for (auto it = p.begin(); it < p.end(); it++) {
                        p2.push_back(*it);
                    }
                }
                if (temp1 != y) {
                    for (auto it = p.begin(); it < p.end(); it++){
                        p1.push_back(*it);
                    }
                }
                sort(p1.begin(),p1.end());sort(p2.begin(),p2.end());
                sort(p3.begin(),p3.end());sort(p4.begin(),p4.end());
                p.clear();
                num++;
                temp1=0;
            }
            else if (temp=='s'&&num%4==3) {
                scanf("%d%d", &x, &y);
                for (int i = 0; i < y; i++) {
                    scanf("%d", &k);
                    p.push_back(k);
                     temp2 = (lower_bound(p3.begin(), p3.end(), k) - p3.begin());
                    p3.erase(p3.begin() + temp2);
                }
                num++;
            }
            else if (temp=='!'&&num % 4 == 3) {
                scanf("%d",&y);
                for (int i = 0; i < y; i++) {
                    scanf("%d", &k);
                    p.push_back(k);
                     temp2 = (lower_bound(p3.begin(), p3.end(), k) - p3.begin());
                    p3.erase(p3.begin() + temp2);
                }
                num++;
            }
            else if (temp=='?'&&num % 4 == 3) {
                for (auto it = p.end() - 1; it >= p.end() - y; it--) {
                    if (*it == x) {
                        temp1++;
                    }
                }
                if (temp1 == y) {
                    for (auto it = p.begin(); it < p.end(); it++) {
                        p3.push_back(*it);
                    }
                }
                if (temp1 != y) {
                    for (auto it = p.begin(); it < p.end(); it++){
                        p2.push_back(*it);
                    }
                }
                sort(p1.begin(),p1.end());sort(p2.begin(),p2.end());
                sort(p3.begin(),p3.end());sort(p4.begin(),p4.end());
                p.clear();
                num++;
                temp1=0;
            }
            else if (temp=='s'&&num%4==0) {
                scanf("%d%d", &x, &y);
                for (int i = 0; i < y; i++) {
                    scanf("%d", &k);
                    p.push_back(k);
                     temp2 = (lower_bound(p4.begin(), p4.end(), k) - p4.begin());
                    p4.erase(p4.begin() + temp2);
                }
                num++;
            }
            else if (temp=='!'&&num % 4 == 0) {
                scanf("%d",&y);
                for (int i = 0; i < y; i++) {
                    scanf("%d", &k);
                    p.push_back(k);
                     temp2 = (lower_bound(p4.begin(), p4.end(), k) - p4.begin());
                    p4.erase(p4.begin() + temp2);
                }
                num++;
            }
            else if (temp=='?'&&num % 4 == 0) {
                for (auto it = p.end() - 1; it >= p.end() - y; it--) {
                    if (*it == x) {
                        temp1++;
                    }
                }
                if (temp1 == y) {
                    for (auto it = p.begin(); it < p.end(); it++) {
                        p4.push_back(*it);
                    }
                }
                if (temp1 != y) {
                    for (auto it = p.begin(); it < p.end(); it++){
                        p3.push_back(*it);
                    }
                }
                sort(p1.begin(),p1.end());sort(p2.begin(),p2.end());
                sort(p3.begin(),p3.end());sort(p4.begin(),p4.end());
                p.clear();
                num++;
                temp1=0;
            }
        }
        for(auto it=p1.begin();it<p1.end();it++){
            if(it==p1.begin())
                printf("%d",*it);
            else
                printf(" %d",*it);
        }
        printf("\n");
        for(auto it=p2.begin();it<p2.end();it++){
            if(it==p2.begin())
                printf("%d",*it);
            else
                printf(" %d",*it);
        }
        printf("\n");
        for(auto it=p3.begin();it<p3.end();it++){
            if(it==p3.begin())
                printf("%d",*it);
            else
                printf(" %d",*it);
        }
        printf("\n");
        for(auto it=p4.begin();it<p4.end();it++){
            if(it==p4.begin())
                printf("%d",*it);
            else
                printf(" %d",*it);
        }
        printf("\n");
    }
}

 

肝了四个小时,超时了 cnm 文章来源地址https://www.toymoban.com/news/detail-829702.html

到了这里,关于扑克牌游戏。唬牌的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python用扑克牌计算24点

    一副扑克牌的每张牌表示一个数(J、Q、K 分别表示 11、12、13,两个司令都表示 6)。任取4 张牌,即得到 4 个 1~13 的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式。每个数只能参与一次运算,4 个数顺序可以任意组合,4 个运算符任意取 3 个且可以重复

    2023年04月08日
    浏览(34)
  • 如何用Java实现扑克牌(附源码)

    目录 一.扑克牌的数据结构  二.买牌(扑克牌的初始化) 三.洗牌 四.发牌 五.完整代码 Card.java CardList.java 六.测试 输出结果  首先,扑克牌是一幅一幅的,除去大小王以外一共有 52 张,我们可以考虑用数组来存储,数组的每一个元素都是一张牌,这是牌库的牌;除了要考虑牌库

    2024年02月04日
    浏览(37)
  • 剑指 Offer 61. 扑克牌中的顺子

    剑指 Offer 61. 扑克牌中的顺子 排序,计算0的个数,看其他的数字是不是连续的,不连续的话用0补,如果0的个数不够补了,就无法构成顺子。

    2024年02月11日
    浏览(36)
  • 剑指 Offer ! 61. 扑克牌中的顺子

    参考资料:力扣K神的讲解 剑指 Offer 61. 扑克牌中的顺子 简单 351 相关企业 从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。 示例 1: 输入: [1,2

    2024年02月13日
    浏览(38)
  • 数据库编程大赛:一条SQL计算扑克牌24点

    你是否在寻找一个平台,能让你展示你的SQL技能,与同行们一较高下?你是否渴望在实战中提升你的SQL水平,开阔你的技术视野?如果你对这些都感兴趣,那么本次由NineData主办的《数据库编程大赛》,将是你的最佳选择! 本次数据库编程大赛的奖项安排:一等奖(1人)、二

    2024年02月03日
    浏览(41)
  • 【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年02月21日
    浏览(38)
  • 小啊呜产品读书笔记001:《邱岳的产品手记-16》第30讲产品案例分析:Primer的扑克牌交互 & 第31讲 产品分析的套路(下):如何出解决方案?

    叮嘟!这里是小啊呜的产品进阶读书笔记整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧! Google 出品的 Primer,让你 5 分钟学市场营销 (1)这种交互方式看起来很像在玩儿扑克牌,所以我们就姑且管它叫 扑克牌交互 ,这其实也是 卡片设计 的一种。

    2024年02月07日
    浏览(48)
  • HTML5 实现扑克翻牌游戏

     扑克翻牌游戏就是桌面24张牌,玩家翻到两张相同扑克牌则消去,如果时间2分钟到了,仍然没有成功则游戏失败。扑克翻牌游戏运行结果如图1。   Html5倒计时功能可以使用setTimeout()函数或者setInterval()函数来实现。 1.使用setTimeout实现倒计时功能 setTimeout()会在一个指定的延

    2024年02月13日
    浏览(36)
  • 13、Java——“21点”扑克游戏系统(变量+循环)

    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:乐趣国学的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java案例分享专栏 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:Java——“21点”扑克游戏系统(变量+循环)

    2023年04月08日
    浏览(29)
  • 并查集维护额外信息,算法思路类似前缀和,结构类似扑克接龙

    240. 食物链 动物王国中有三类动物 A,B,CA,B,C, 这三类动物的食物链构成了有趣的环形 。 AA 吃 BB,BB 吃 CC,CC 吃 AA。 现有 NN 个动物,以 1∼N 1∼N 编号 。 每个动物都是 A,B,CA,B,C 中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这 NN 个动物所构成的

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包