Chinese Mahjong
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的更多相关文章
- uva 11210 Chinese Mahjong(暴力搜索)
		
Chinese Mahjong Mahjong () is a game of Chinese origin usually played by four persons with tiles res ...
 - UVa 11210 (DFS) Chinese Mahjong
		
大白书第一章的例题,当时看起来很吃力,现如今A这道题的话怎么写都无所谓了. 思路很简单,就是枚举胡哪张牌,然后枚举一下将牌,剩下如果能找到4个顺子或者刻子就胡了. 由于粗心,34个字符串初始化写错,各 ...
 - Chinese Mahjong UVA - 11210 (暴力+回溯递归)
		
思路:得到输入得到mj[]的各个牌的数量,还差最后一张牌.直接暴力枚举34张牌就可以了. 当假设得到最后一张牌,则得到了的牌看看是不是可以胡,如果可以胡的话,就假设正确.否者假设下一张牌. 关键还是如 ...
 - Chinese Mahjong UVA - 11210 (DFS)
		
先记录下每一种麻将出现的次数,然后枚举每一种可能得到的麻将,对于这个新的麻将牌,去判断可不可能胡,如果可以胡,就可以把这张牌输出出来. 因为eye只能有一张,所以这个是最好枚举的,就枚举每张牌成为ey ...
 - UVa 11210 Chinese Mahjong (暴力,递归寻找)
		
题意:这个题意.有点麻烦,就是说给定13张牌,让你求能“听”的牌.(具体的见原题) 原题链接: https://uva.onlinejudge.org/index.php?option=com_onl ...
 - 【题解】 UVa11210 Chinese Mahjong
		
pdf传送门 直接模拟+搜索,考虑一下选哪一个是将,然后搜出顺子和刻子,最后判断一下可不可行就好了! #include<stdio.h> #include<string.h> ...
 - UVa中国麻将(Chinese Mahjong,Uva 11210)
		
简单的回溯题 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...
 - UVa 11210 - Chinese Mahjong
		
解题报告:麻将的规则这里就不说了,这题我们可以用暴力的方法,所以我们应该这样枚举,即将34张牌的每一张牌都放到原来的十三张牌里面去,所以这时我们只要判断这十四张牌能不能胡,因为若要胡的话一定要有一个对 ...
 - UVa 11210 - Chinese Mahjong 模拟, 枚举 难度: 0
		
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
 
随机推荐
- SQLSERVER 根据值查询表名
			
CREATE PROCEDURE [dbo].[SP_FindValueInDB](@value VARCHAR(1024)) ASBEGIN-- SET NOCOUNT ON added to pr ...
 - mtd-utils 的 使用
			
关于编译可以查看文章:<Arm-Linux 移植 mtd-utils 1.x> 查看信息 使用命令前用cat /proc/mtd 查看一下mtdchar字符设备:或者用ls -l /dev ...
 - oracle给用户授权存储过程
			
https://www.jianshu.com/p/fab356d68ae2 grant connect,resource to xinomonitor; 发现不能进行断点调试,然后授如下权限 gra ...
 - 前端开发 Vue  -4promise解读2
			
https://www.runoob.com/vue2/vue-tutorial.html promise promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执 ...
 - Python基本数据类型及实例详解
			
Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对 ...
 - 使用swap扩展内存
			
当系统在内存不够用的时,新建一个swap文件,这个文件可以把内存中暂时不用的传输到对应的swap文件上,相当于扩展了内存的大小,具体使用方法如下: swap文件可以自己选择放在哪里,自己新建一个对应的 ...
 - 解决 VUE项目过大nodejs内存溢出问题
			
今天在启动vue项目的时候报了这样一个错误, 如图所示:频繁出现此种情况,项目太大,导致内存溢出,排除代码问题外,可参照以下方式解决 // 全局安装increase-memory-limit npm ...
 - FI-TCODE收集
			
主数据:FS00 编辑总帐科目FS01 创建主记录FS02 更改主记录FS03 显示主记录FS04 总帐科目更改(集中地 ...
 - 发现一个对列排版挺好用的命令:column
			
help [root@hdpool1 tmp]# column -h Usage: column [options] [file ...] Options: -c, --columns <wid ...
 - shell 大型脚本工具开发实战
			
拆分脚本功能,抽象函数 1.function get_all_group 返回进程组列表字符串 2.function get_all_process 返回进程名列表字符串"nginx htt ...