大家都知道雀魂majsoul是一个麻将游戏
ln的麻将功底相当高(魂天dalao),今天有个小学妹问他麻将怎么打才能胡大牌
但是因为ln还要上国服第一,懒的回她
所以他把问题抛给了你
很简单,你只要判断题目给出的牌型能不能胡特定的牌型即可
1.九莲宝灯只有一种类型的牌(条、饼、万)其中19各三张其他1张再加任何一张当前种类的牌即可
2.七对子(七个不同的对子)
3.国士无双需要条、饼(筒)、万的幺九牌(1和9共计6张)+所有的风牌(东西南北白发中7张)+前面的牌任意一张
当然,有时候出千不可避免,所以你需要判断这副牌是否合法(每种牌只有四张)
条 筒 万每种牌从1-9及w1 w2 w3 - w7 w8 w9每张牌有四张相同的,风牌及东西南北白发中,也是有4张相同的。共计136张牌。

输入格式:

第一行包含一个n,接着n行每行一个字符串。
如果当前字符为t,b,w 那么他们分别代表着条,饼(筒),万。他们后面会紧接着一个数字,例如,t2代表2筒,w3代表三万。
如果当前字符为zxcvjkl其中一个,那么他们直接代表风牌中的一个。

输出格式:

对于每个字符串判断牌型:
1七对子:“qidui”
2九莲宝灯:“jiulianbaodeng!”
3国士无双:“32000!”
4如果都不符合,则输出“zhahu”

输入样例:

1
zxcvjklt1t9w1w9b1b9l

输出样例:

32000!

思路

对于每一行,我们用四个数组分别存储条、饼(筒)、万、风牌的每种牌的个数。紧接着判断该牌是否合法,最后依次对三种胡牌的条件进行判断即可。

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 12;int n;
string str;
string ch = "zxcvjkl";
int t[N] , b[N] , w[N]; // 存储条、饼、万
int c[N];   // 存储风牌,依次表示 东西南北白发中bool init() {int cnt = 0;for(int i = 0 ; i < str.size() ; i++) {if(ch.find(str[i]) != -1) {if(++c[ch.find(str[i]) + 1] > 4)return false;} else {if(i + 1 >= str.size())return false;if(str[i] == 't') {if(++t[str[i + 1] - '0'] > 4)return false;} else if(str[i] == 'b') {if(++b[str[i + 1] - '0'] > 4)return false;} else if(str[i] == 'w') {if(++w[str[i + 1] - '0'] > 4)return false;}elsereturn false;i++;}cnt++;    }return cnt == 14;    // 判断这手牌是否合法
}// x[i]表示xi的个数,例如t[2]表示二条的个数;
// 只要x[i]=2,那么就说明我xi只有两张,就是一个对子,那么+1
int cntDui(int x[]) {int cnt = 0;for(int i = 1 ; i < 10 ; i++)cnt += x[i] == 2; return cnt;
}// 七对子(七个不同的对子)
bool qidui() {//cout<<"cntDui(t)"<<cntDui(t)<<endl;if(cntDui(t) + cntDui(b) + cntDui(w) + cntDui(c) == 7) {cout<<"qidui"<<endl;return true;}return false;
}// 1. 判断x类型的牌是否每种牌都有,如果没有直接返回false
// 2. 因为题目要求1、9各三张,那么就应当是
// (1->3, 2->1, 3->1, 4->1, 5->1, 6->1, 7->1, 8->1, 9->3) + ((1~9)->1)
// 总共13 + 1 = 14张
int judge(int x[]) {int cnt = 0;for(int i = 1 ; i < 10 ; i++) {cnt += x[i];if(x[i] == 0)return false;}return cnt == 14;
}// 九莲宝灯只有一种类型的牌(条、饼、万)其中1、9各三张其他1张再加任何一张当前种类的牌即可
bool jiulian() {if((judge(t) && t[1] >= 3 && t[9] >= 3) || (judge(w) && w[1] >= 3 && w[9] >= 3)|| (judge(b) && b[1] >= 3 && b[9] >= 3)) {cout<<"jiulianbaodeng!"<<endl;return true;}return false;
}// 判断每种风牌是否都有,因为一种风牌只有一张,所以只需要反判某种风牌不存在就false
bool judgeCh() {for(int i = 1 ; i <= ch.size() ; i++) {if(c[i] == 0)return false;}return true;
}// 判断种类为x、从2到9是否存在,如果存在就不符合 前面的牌任意一张,因为出现了不是【前面的牌】
bool isEmity(int x[]) {for(int i = 2 ; i < 9 ; i++)if(x[i])return false;return true;
}// 国士无双需要条、饼(筒)、万的幺九牌(1和9共计6张)+所有的风牌(东西南北白发中7张)+前面的牌任意一张
bool guoshi() {if(t[1] && t[9] && w[1] && w[9] && b[1] && b[9] && judgeCh() && isEmity(t) && isEmity(w) && isEmity(b)) {cout<<"32000!"<<endl;return true;}return false;
}int main() {cin>>n;  while(n--) {cin>>str;if(!init() || (!qidui() && !jiulian() && !guoshi()))cout<<"zhahu"<<endl;}return 0;
}

L1-8 雀魂majsoul (20 分)相关推荐

  1. 雀魂服务器列表为空,GitHub - xieyuchen13/majsoulAI: 尝试基于雀魂数据训练日麻AI

    牌谱AI 牌谱爬取 概述 为了训练日麻AI,我们首先需要爬取足量的现实牌谱作为训练数据. 雀魂牌谱屋(https://amae-koromo.sapk.ch/ )是一个第三方维护的牌谱收集网站,收集了 ...

  2. 1-4 数组元素的区间删除 (20 分)

    题目: 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接口定义: int Delete( int A[] ...

  3. 7-1 打印沙漏 (20 分)

    ** 7-1 打印沙漏 (20 分) ** 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ************ ***** 所谓&q ...

  4. C++笔试编程题1:雀魂启动

    2019字节跳动笔试编程题 雀魂启动 小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少. 于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花 ...

  5. 校招真题练习016 雀魂启动!(头条)

    雀魂启动! 题目描述 小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少. 于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且去除了一 ...

  6. 7-8 估值一亿的AI核心代码 (20 分) 代码有解析

    7-8 估值一亿的AI核心代码 (20 分) 以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消除原文 ...

  7. 使用NAGA分析雀魂牌谱

    雀魂最近热度很高,想要提升雀力除了啃大部头的教科书式的教程以外,听高段位的讲解自己的牌谱也是一个有效提高雀力的手段.然而目前大多优秀的牌谱讲解都有这样那样的门槛,并且可能会因为要讲的人排队很长,导致自 ...

  8. 1014 福尔摩斯的约会 (20 分) Python和C++版本

    1014 福尔摩斯的约会 (20 分) 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hy ...

  9. 7-1 查找书籍(20 分)(程序设计天梯赛模拟练习题)

    7-1 查找书籍(20 分) 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价. 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息.每本书 ...

  10. PTA—输出全排列 (20分) 递归回溯思想

    PTA-输出全排列 (20分) 递归回溯思想 题目要求: 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间. 输入格式: 输入给出 ...

最新文章

  1. 如何在CSDN上快速引用到网页内的局部位置?
  2. linux下字符串查找 与替换
  3. JavaScript实现多项式哈希算法(附完整源码)
  4. 小米网抢购系统开发实践和我的个人观察
  5. appium java 测试用例_如何在C#中使用Appium编写测试用例?
  6. JavaScript数据类型 typeof, null, 和 undefined
  7. 机器学习实战 梯度上升 数学推导_机器学习全路线经典书籍
  8. ASR开发工作笔记0001---Eclipse DS-5-报错Cannot checkout an uncounted license withini a Windows Terminal Servi
  9. 《南溪的目标检测学习笔记》——图像预处理的学习笔记
  10. MySQL(二):MySQL性能优化
  11. C#后台调用跨域MVC服务,带Cookie验证
  12. 面试时,如何巧妙回答跳槽问题
  13. 近远场转换算法matlab,计算电磁学之FDTD算法的MATLAB语言实现解析.doc
  14. awr报告分析 mysql_生成awr报告
  15. python帮你获取王者荣耀金币
  16. C++软件工程师的发展前景如何?
  17. jQuery的事件冒泡,事件对象和图片跟随
  18. 如何减少block的数量?也就是减小Namenode的内存压力?
  19. 独立开发者+开源项目,超级个体的价值模式
  20. 使用acmesh免费开启https(详细概念介绍与操作步骤记录)

热门文章

  1. 如何快速提高自己的领导力?
  2. 排列组合 、牛顿二项式定理、多项式系数
  3. BJT转UTC世界协调时
  4. Congestion问题怎么解决?
  5. android fresco 流程,Android Fresco 笔记
  6. 手机+测试网络+苹果手机软件,iOS-用手机网络测试Ipv6
  7. 写在微信小程序一周年
  8. linux adb 驱动 home,Ubuntu下adb驱动问题
  9. 最新《播布客李明新概念C语言作品》
  10. 新手上路参考驾驶手册 36计教你安全上路(收集)