描述

你玩过7王523吗?

这个扑克牌游戏可以2~5个人玩,最开始的时候,每人5张牌,庄家6张牌。庄家首先出牌,然后轮流出牌或不出牌。

第一个出牌的人可以打出任意牌,后面的人必须比前面的牌大才能出牌,且牌型必须要和前面人出牌的牌型一致或大于前面人的牌型。 牌的大小关系是7>大王>小王>5>2>3>A>K>Q>J>10>9>8>6>4.不区分花色。

牌型有:对子(两张牌点数一样),炸弹(三张牌一样),氢弹(四张牌一样)

牌型的大小关系是:氢弹>炸弹>对子、单牌

另外还有一种特殊的出牌规则,如果有人出单牌,某人手上有一样点数的对子,则有对子的人可以忽略出牌顺序直接“碰”。在“碰”后,后面只有炸弹或氢弹可以出。(比如甲出单牌,后面只要有人有碰,一定是先满足碰)

当某个人打出的牌没人要时,本轮出牌结束,最后一个出牌的人取得本轮胜利,本轮出的牌就是胜利的人的积分,1张牌记1分。再由胜利的人开始在剩余牌中按顺序拿几张牌和手上的牌凑够五张,接下来按顺序另外的人也从剩余牌中按顺序拿够5张。 例如:

甲:2 4 4 6 K
乙:3 8 8 J 10
丙:K K 4 A A
剩余牌:7 7 2

假设出牌顺序是甲、乙、丙;

第一轮:甲先出6,则乙可以出J、10或3;丙如果不要,则甲可以出2.这个时候没有人有牌能够大过2,该轮出牌结束,甲获得胜利可以得到3个积分。接下来甲可以从剩余牌中获得2个7,而乙可以获得2.丙没有出牌就不能拿。

第二轮:甲出K,这个时候丙可以跳过乙优先进行“碰”,由于其他人没有炸弹,所以丙获得该轮胜利,得到3个积分。

为了简化问题,我们不考虑获胜的策略。也就是说轮到某人出牌,如果他手上的牌有大于前面人出的牌,则他就打出刚好大于前面的牌(有出必出),有“碰”必“碰”。 比如第一个人出Q,第二个人牌是K333,第三个人牌是QQJ,则第三个人会先碰出来。因为对于第二个人来说他优先选择出K,所以第三个人先碰。

每一轮第一个出牌的人,优先出手中最小的对子(对7除外),没有对子就出最小的单牌,没有单牌出对7,没有对7出最小的炸弹,没有炸弹出氢弹。

接下来轮流出牌,出的牌型必须和前面一至或大于前面的牌型,对子、炸弹、氢弹不能拆开出,出牌的原则的刚好大于前面的牌,如果没有大过前面的牌就PASS,由后面一个人出牌。如果一个人出的牌其他人都pass,则本轮结束,最后一个出牌的为胜利者。

注:大王与小王不在一起算单牌,大王和小王在一起算炸弹(不能拆开),且是仅次于777的最大炸弹。

开始的时候,第一个人自动作为庄家先拿前面的6张牌,接下来玩家依次拿5张。当没有剩余的牌且某个玩家手上没有牌,游戏结束,其他玩家手中的没有打出去的牌自动算为该玩家的积分。

输入

一共2行;

第一行是一个整数M表示玩家人数,第二行是一个字符串表示初始牌的顺序,其中大王用G表示,小王用F表示,10用X表示。

输出

M行,每行是一个整数,表示第i个玩家最后获得的积分。

样例输入 [复制]

3
25G36Q3885XKK4AA77A

样例输出

13
2
4

提示

样例解释

第一轮:第一个人出6,然后第二个人出X,第三个人不要,第一个人出Q,第二个人出3,第三个人不要,第一个人出2,第二个人出5、三个人不要,第一个人出G,第二三个人不要,第一轮结束。第一个人获得积分7,然后获得77A三张牌

第二轮:第一个人出A, 第三个人有碰优先由第三个人碰,第三个人碰后,没有人有炸弹,该轮第三个人胜利。第三个人获得积分3

第三轮:第三个人出对K,第一个人出对7,第一个人取得本轮胜利获得积分4

第四轮:第一个人出3,第二个人、第三个人pass,第一个人取得胜利获得积分1

第五轮:第一个人出5,第一个人取得胜利获得积分1。游戏结束。

最后得分:

第一个人:13

第二个人:2

第三个人:4

是不是一道很简单的模拟题啊

直接模拟就好了

代码也不长

最多的也才5.7k左右

#include<bits/stdc++.h>
using namespace std;
char ch[60];
int pai[60],num[5],a[5][20],n,jz,len;
inline bool check(){for(int i=1;i<=n;i++){int k=0;for(int j=1;j<=16;j++)if(a[i][j])k+=a[i][j];         if(!k)return false;}return true;
}
inline bool chupai(int &kind,int &ji,int p){if(kind==0){for(int i=1;i<=14;i++){if(a[p][i]==2){a[p][i]=0,num[p]-=2,kind=2,ji=i;return true;}}for(int i=1;i<=15;i++){if(a[p][i]==1){a[p][i]=0,num[p]-=1,kind=1,ji=i;return true;}}if(a[p][15]==2){a[p][15]=0,num[p]-=2,kind=2;ji=15;return true;}for(int i=1;i<=16;i++){if(a[p][i]==3){a[p][i]=0;if(i==16)num[p]-=3;else num[p]-=3;kind=3,ji=i;return true;}}for(int i=1;i<=15;i++){if(a[p][i]==4){a[p][i]=0;num[p]-=4;kind=4,ji=i;return true;}}}for(int i=ji+1;i<=16;i++){if(a[p][i]==kind){a[p][i]=0;if(i==16)num[p]-=2;else num[p]-=kind;ji=i;return true;}}int k=max(kind+1,3);while(k<=4){for(int i=1;i<=16;i++){if(a[p][i]==k){a[p][i]=0;if(i==16)num[p]-=2;else num[p]-=k;kind=k,ji=i;return true;}}k++;}return false;
}
inline int peng(int kind,int ji,int p){if(kind!=1)return 0;for(int i=p%n+1;i!=p;i=i%n+1)if(a[i][ji]==2){a[i][ji]=0,num[i]-=2;return i;}return 0;
}
inline void zaicifapai(int p){while(num[p]<5){num[p]++,a[p][pai[++jz]]++;  if(a[p][13]&&a[p][14]){a[p][13]=a[p][14]=0,a[p][16]=3;}if(jz>=len)return;    }for(int i=p%n+1;i!=p;i=i%n+1){while(num[i]<5){num[i]++,a[i][pai[++jz]]++;    if(a[i][13]&&a[i][14]){a[i][13]=a[i][14]=0,a[i][16]=3;}if(jz>=len)return;        }}
}
int fenshu[5];
int main(){cin>>n;scanf("%s",ch);len=strlen(ch);for(int i=0;i<len;i++){if(ch[i]=='7')pai[i+1]=15;if(ch[i]=='G')pai[i+1]=14;if(ch[i]=='F')pai[i+1]=13;if(ch[i]=='5')pai[i+1]=12;if(ch[i]=='2')pai[i+1]=11;if(ch[i]=='3')pai[i+1]=10;if(ch[i]=='A')pai[i+1]=9;if(ch[i]=='K')pai[i+1]=8;if(ch[i]=='Q')pai[i+1]=7;if(ch[i]=='J')pai[i+1]=6;if(ch[i]=='X')pai[i+1]=5;if(ch[i]=='9')pai[i+1]=4;if(ch[i]=='8')pai[i+1]=3;if(ch[i]=='6')pai[i+1]=2;if(ch[i]=='4')pai[i+1]=1;}num[1]=6;for(int i=1;i<=6;i++){a[1][pai[++jz]]++;if(a[1][13]&&a[1][14]){a[1][13]=a[1][14]=0,a[1][16]=3;}}for(int i=1;i<n;i++){for(int j=1;j<=5;j++)a[i+1][pai[++jz]]++,num[i+1]=5;if(a[i][13]&&a[i][14])a[i][13]=a[i][14]=0,a[i][16]=3;}int first=1;while(jz<=len||check()){int prek=0,pren=0,l=0;chupai(prek,pren,first);if(pren==16)l+=2;else l+=prek;for(int i=first%n+1;i!=first;i=i%n+1){int k=peng(prek,pren,first);if(k){first=i=k,l+=2,prek=3,pren=0;}else if(chupai(prek,pren,i)){if(pren==16) l+=2;else l+=prek;first=i;}}if(jz<=len)zaicifapai(first);fenshu[first]+=l;}for(int i=1;i<=n;i++)num[i]=0;for(int i=1;i<=n;i++)for(int j=1;j<=16;j++)if(a[i][j])if(j!=16)num[i]+=a[i][j];else num[i]+=2;               for(int i=1;i<=n;i++)cout<<fenshu[i]+num[i]<<endl;
}

转载于:https://www.cnblogs.com/stargazer-cyk/p/10366433.html

7王523(炒鸡简单的模拟题哦哦哦)相关推荐

  1. arr 安卓调用qmui_QMUI(Android)炒鸡简单的配置详解

    最近由于工作紧张,没有更新博客,通过几个项目经验,小哥儿又准备了一大波Android开发技能跟大家分享. 来不及解释了,准备好了嘛?快上车! 1. QMUI已开源,页面开发新技能,腾讯出品,必属精品. ...

  2. c#同时上传文件和参数,Java接收的完整教程,炒鸡简单!网上的教程弱爆了!

    工作需求,需要在c#端将文件和数据进行上传,Java端接收文件上传到oss,将数据处理到数据库. 这个教程,秒杀市面百分九十九的帖子,绝对是楼主精心打造! 一.网上的一般做法 网上搜出来的教程,基本都 ...

  3. 10秒搞定,苹果iPhone手机不用电脑换铃声,这个方法真的炒鸡简单!

    新老司机朋友们晚上好,隔壁老王又来和大家见面了~ 最近很多朋友都在吐槽苹果手机不能直接在手机上设置铃声,每次想设置一个自己喜欢的歌曲作为铃声还要连接电脑,也太麻烦了吧. 如果没有电脑呢?这个看似很简单 ...

  4. 炒鸡简单,带你快速撸一遍Numpy代码!

    作者:贾胜杰,硕士,退役军人,电气工程专业,现成功转行K12领域数据挖掘工程师,不仅在数据清理.分析和预测方向,而且在自制力和高效学习方面都有丰富经验. 编辑:王老湿 我们一起来学习Python数据分 ...

  5. Openpose——windows编译(炒鸡简单)

    前言 最近准备看看rtpose的代码,发现已经由openpose这个项目维护着了,由于经常在windows下调试代码,所以尝试了一下如何在windows下编译openpose源码,整体来说非常简单的. ...

  6. 一个炒鸡简单计算拼音声母出现次数及概率程序

    及其原始代码,以防今后有类似场景需要使用,特意记录一下: 功能为计算拼音声母出现次数及概率 public static void main(String[] args) {//测试文本String t ...

  7. 算法:动态申请数组(new)后将数组所有元素置零(初始化数组)的方法(炒鸡简单)(C++语言)

    int *arr = new int [n]();//最后的括号,全置零.for(int i = 0;i<n;i++){cout<<arr[i]<<" &quo ...

  8. 炒鸡简单的javaScript的call和apply方法

    解释一 作者:杨志 链接:https://www.zhihu.com/question/20289071/answer/14644278 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  9. NOIp模拟题 之 肮脏的牧师 (桶排序)

    闲话: 考场上看到了这一题,简直令我震惊!啊!居然还有真么简单的模拟题!良心啊! 而且,还是我 痴迷的 熟悉的游戏 --  欧气传说 炉石传说! (话说题面的那三张卡都贼 恶心 好用!都可以在前期打出 ...

最新文章

  1. Python的数据库操作(Sqlalchemy)
  2. maven插件的使用
  3. 把本地txt文件导入到内表中
  4. 飞思卡尔智能车iar工程常见问题
  5. C语言再学习 -- ctype.h字符判断函数
  6. Android Service 的一些笔记
  7. linux系统用户锁定与解锁
  8. 【前端 · 面试 】HTTP 总结(四)—— HTTP 状态码
  9. 关于C++的建议,仅仅为了规范代码(二)
  10. Java 需要转义的字符以及json字符串的转义
  11. read H264 Nal
  12. 烽火HG680-R-MSO9280-河南电信_湖北联通免费刷机固件及说明
  13. 利用MATLAB编程或者Simulink工具来绘制伯德图和奈奎斯特图
  14. 打开cmd 的方式和常用的cmd快捷键
  15. 35岁腾讯员工被裁员感叹:北京一套房,存款700多万,失业好焦虑
  16. Bad Request This combination of host and port requires TLS. postman
  17. 服务器里怎么找到K3账套文件,金蝶K3账套自动备份步骤详解
  18. Python之爬取58同城在售楼盘房源信息
  19. 基于STM32之控制步进电机,学到即赚到!(含主代码)
  20. python计算协方差矩阵_在Python中构建协方差矩阵

热门文章

  1. 广东全国计算机信息高新技术考试成绩查询,广东省教育考试院
  2. knockout 理解
  3. 切线和倒数_导数法求切线
  4. 狂神说MySQL学习笔记
  5. 【ChatGPT4】 NLP(自然语言处理)第六课 基于统计和基于深度学习的依存句法分析方法
  6. 对状压dp的一点理解
  7. 荣耀8viper4android,[深度]选手名场面盘点之AT篇:初代全能王,当年的泰神真的很强...
  8. 给你介绍下,Hippo4J 动态线程池基础架构
  9. 异质图神经网络(持续更新ing...)
  10. 2021年继电保护考试题及继电保护找解析