OJ题号:UVa11210

思路:

首先字符串处理读入手牌,str数组将手牌和数字对应,接下来搜索,先搜对子,如果搜过对子就不搜了。由于对子有且只有一个,可以在搜到以后直接跳出。同时注意一副麻将中每种牌只有4个,所以不能作为将。

 #include<cstdio>
#include<string>
#include<vector>
#include<sstream>
#include<iostream>
using namespace std;
vector<int> mahjong;
const string str[]={"","1T","2T","3T","4T","5T","6T","7T","8T","9T","1S","2S","3S","4S","5S","6S","7S","8S","9S","1W","2W","3W","4W","5W","6W","7W","8W","9W","DONG","NAN","XI","BEI","ZHONG","FA","BAI"};
void input(string line,vector<int> &ans) {
ans.clear();
for(int i=;i<;i++) ans.push_back();
stringstream ss(line);
string temp;
for(int i=;i<;i++) {
ss>>temp;
for(int j=;j<=;j++) {
if(temp==str[j]) {
ans[j]++;
break;
}
}
}
}
bool duizi=,flag=;
int ting;
bool hu() {
for(int i=;i<=;i++) {
if(mahjong[i]) {
goto Try;
}
}
cout<<" "+str[ting];
flag=;
return ;
Try:
if(!duizi) {
for(int i=;i<=;i++) {
if(mahjong[i]>=) {
mahjong[i]-=;
duizi=;
bool f=hu();
duizi=;
mahjong[i]+=;
if(f) return ;
}
}
return ;
}
for(int i=;i<=;i++) {
if(mahjong[i]>=) {
mahjong[i]-=;
bool f=hu();
mahjong[i]+=;
if(f) return ;
}
}
for(int i=;i<=;i++) {
if(i==||i==||i==||i==||i==||i==) continue;
if(mahjong[i]&&mahjong[i+]&&mahjong[i+]) {
mahjong[i]--;
mahjong[i+]--;
mahjong[i+]--;
bool f=hu();
mahjong[i]++;
mahjong[i+]++;
mahjong[i+]++;
if(f) return ;
}
}
return ;
}
int main() {
int turn=;
while() {
string s;
getline(cin,s);
if(s=="") break;
turn++;
printf("Case %d:",turn);
mahjong.clear();
input(s,mahjong);
flag=;
for(ting=;ting<=;ting++) {
if(mahjong[ting]==) continue;
mahjong[ting]++;
hu();
mahjong[ting]--;
}
if(!flag) printf(" Not ready");
printf("\n");
}
return ;
}

注:本随笔整理自QQ空间旧文。发布时间为2017年1月22日。

查看原文

Chinese Mahjong的更多相关文章

  1. uva 11210 Chinese Mahjong(暴力搜索)

    Chinese Mahjong Mahjong () is a game of Chinese origin usually played by four persons with tiles res ...

  2. UVa 11210 (DFS) Chinese Mahjong

    大白书第一章的例题,当时看起来很吃力,现如今A这道题的话怎么写都无所谓了. 思路很简单,就是枚举胡哪张牌,然后枚举一下将牌,剩下如果能找到4个顺子或者刻子就胡了. 由于粗心,34个字符串初始化写错,各 ...

  3. Chinese Mahjong UVA - 11210 (暴力+回溯递归)

    思路:得到输入得到mj[]的各个牌的数量,还差最后一张牌.直接暴力枚举34张牌就可以了. 当假设得到最后一张牌,则得到了的牌看看是不是可以胡,如果可以胡的话,就假设正确.否者假设下一张牌. 关键还是如 ...

  4. Chinese Mahjong UVA - 11210 (DFS)

    先记录下每一种麻将出现的次数,然后枚举每一种可能得到的麻将,对于这个新的麻将牌,去判断可不可能胡,如果可以胡,就可以把这张牌输出出来. 因为eye只能有一张,所以这个是最好枚举的,就枚举每张牌成为ey ...

  5. UVa 11210 Chinese Mahjong (暴力,递归寻找)

    题意:这个题意.有点麻烦,就是说给定13张牌,让你求能“听”的牌.(具体的见原题) 原题链接: https://uva.onlinejudge.org/index.php?option=com_onl ...

  6. 【题解】 UVa11210 Chinese Mahjong

    pdf传送门 直接模拟+搜索,考虑一下选哪一个是将,然后搜出顺子和刻子,最后判断一下可不可行就好了! #include<stdio.h> #include<string.h> ...

  7. UVa中国麻将(Chinese Mahjong,Uva 11210)

    简单的回溯题 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...

  8. UVa 11210 - Chinese Mahjong

    解题报告:麻将的规则这里就不说了,这题我们可以用暴力的方法,所以我们应该这样枚举,即将34张牌的每一张牌都放到原来的十三张牌里面去,所以这时我们只要判断这十四张牌能不能胡,因为若要胡的话一定要有一个对 ...

  9. UVa 11210 - Chinese Mahjong 模拟, 枚举 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

随机推荐

  1. 十六、USB驱动

    一.USB固件和USB传输方式 USB固件: USB固件一般不需要我们编写,在此不做程序分析. USB固件中包含USB设备的出厂信息,如厂商ID.产品ID.主版本号和次版本号等.这就是为什么当我们把U ...

  2. vs2017环境下python包的安装

    1)---vs已经下载了的才适用 1,鼠标放在右侧窗口python环境那里(如没有窗口,可点击最上方的“窗口”-“重置窗口”) 2,右键然后点击“查看所有python环境”,会弹出当前默认的环境(高亮 ...

  3. YIii2.0-学习笔记之服务器安装

    最近项目需要,学习了一下yii2.0框架 第一步:  安装composer--------作为一个phper  composer不会用可能有点不合适 下载composer.phar文件 #curl - ...

  4. jmeter保存返回数据到csv

    添加一个线程组,然后右键选择“正则表达式提取器” 配置正则表达式: 添加添加后置处理器beanshell postprocessor: 保存提取的数据: 代码: FileWriter fstream ...

  5. 利用WkHtmlToPdf,把H5 转成PDF

    工具下载地址: 链接:https://pan.baidu.com/s/1TSq2WWZcvPwuIfPRHST-FA 提取码:wkx8 原理: 通过IIS访问页面,利用WkHtmlToPdf.exe, ...

  6. VBA for循环

    for循环是一种重复控制结构,它允许开发人员有效地编写需要执行特定次数的循环. 语法 以下是VBA中for循环的语法. For counter = start To end [Step stepcou ...

  7. BPM FlowPortal 开发环境及发布环境的配置

    开启开发模式 开发时应设置防缓存和调试信息输出. 开发后发布 开发完成后正式使用时,除了对以上各项做相反设置外,还需设置web.config中的JSVersion,使每个用户都能自动下载最新版的js文 ...

  8. arm的基本介绍

    2440是arm9核,是基于v4 架构 6410是arm11核 基于v6架构 210是a8的核   基于v7架构 前面的是经典阵营,比较老.Arm11之后改为contex系列. Arm7的水准和M3相 ...

  9. nodejs 模块全局安装路径配置

    nodejs下载安装完成后 输入npm config ls 或者npm config list npm 默认的全局安装路径为该路径,将包都下载在C盘中不是我们想要的结果.一般建议修改在nodejs的安 ...

  10. kali linux Desktop Environemt types and kali linux install virualbox

    1.we know the kali linux desktop environmet can also be costomized ,Desktop environmet can use GNOME ...