【题解】 UVa11210 Chinese Mahjong
直接模拟+搜索,考虑一下选哪一个是将,然后搜出顺子和刻子,最后判断一下可不可行就好了!
#include<stdio.h>
#include<string.h>
const char* mahjong[]={"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"
};
char s[15];
int Case,c[36],mj[15];
int init(char *S){
for(int i=0;i<34;i++)
if(strcmp(S,mahjong[i])==0)return i;
return -1;
}
bool search(int dep){
for(int i=0;i<34;i++)
if(c[i]>=3){
if(dep==3)return true;
c[i]-=3;
if(search(dep+1))return true;
c[i]+=3;
}
for(int i=0;i<25;i++)
if(i%9<=6 && c[i] && c[i+1] && c[i+2]){
if(dep==3)return true;
c[i]--;c[i+1]--;c[i+2]--;
if(search(dep+1))return true;
c[i]++;c[i+1]++;c[i+2]++;
}
return false;
}
bool check(){
for(int i=0;i<34;i++)
if(c[i]>=2){
c[i]-=2;
if(search(0))return true;
c[i]+=2;
}
return false;
}
int main(){
while(scanf("%s",&s)!=EOF){
if(s[0]=='0')break;
printf("Case %d:",++Case);
mj[0]=init(s);
for(int i=1;i<13;i++){
scanf("%s",&s);
mj[i]=init(s);
}
int flag=0;
for(int i=0;i<34;i++){
memset(c,0,sizeof(c));
for(int j=0;j<13;j++)c[mj[j]]++;
if(c[i]>3)continue;
c[i]++;
if(check()){
flag=1;
printf(" %s",mahjong[i]);
}
c[i]--;
}
if(!flag)printf(" Not ready");
puts("");
}
return 0;
}
【题解】 UVa11210 Chinese Mahjong的更多相关文章
- uva 11210 Chinese Mahjong(暴力搜索)
Chinese Mahjong Mahjong () is a game of Chinese origin usually played by four persons with tiles res ...
- Chinese Mahjong
OJ题号:UVa11210 思路: 首先字符串处理读入手牌,str数组将手牌和数字对应,接下来搜索,先搜对子,如果搜过对子就不搜了.由于对子有且只有一个,可以在搜到以后直接跳出.同时注意一副麻将中每种 ...
- 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 ...
- 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 ...
随机推荐
- 温故而知新-面向对象的PHP
1 类的多态 不同的类对同一操作可以有不同的行为. 比如自行车和汽车都有移动这个成员函数行为, 那么自行车类可以移动,行为和汽车的移动行为肯定不同. 2 析构函数不能有参数 3 __set和__get ...
- Tessnet2 a .NET 2.0 Open Source OCR assembly using Tesseract engine
http://www.pixel-technology.com/freeware/tessnet2/ Tessnet2 a .NET 2.0 Open Source OCR assembly usin ...
- 「小程序JAVA实战」小程序视频列表到详情功能(58)
转自:https://idig8.com/2018/09/23/xiaochengxujavashizhanxiaochengxushipinliebiaodaoxiangqinggongneng57 ...
- ubuntu安装rtx
终端安装RTX sudo apt-get install wine 安装wine下的window扩展包安装工具winetricks,在终端下输入: sudo wget http://winetrick ...
- Resources与StreamingAssets文件夹的区别
1.Resources文件夹 Resources文件夹是一个只读的文件夹,通过Resources.Load()来读取对象.因为这个文件夹下的所有资源都可以运行时来加载,所以Resources文件夹下 ...
- 7.25 10figting!
TEXT 88 European utilities欧洲公用事业 Power struggles 能源之争(陈继龙编译) Nov 30th 2006 From The Economist print ...
- 【326】PIL 截图及图片识别
参考:另一种用python识别图片文字的方法 参考:Python人工智能之图片识别,Python3一行代码实现图片文字识别 参考:Python3+Selenium3环境构建填坑之旅 参考:基于pyth ...
- mysql5.7 初始化启动
root@0f6852dfee81:/# mysql --versionmysql Ver 14.14 Distrib 5.7.18-16, for debian-linux-gnu (x86_64 ...
- hadoop之HDFS学习笔记(一)
主要内容:hdfs的整体运行机制,DATANODE存储文件块的观察,hdfs集群的搭建与配置,hdfs命令行客户端常见命令:业务系统中日志生成机制,HDFS的java客户端api基本使用. 1.什么是 ...
- Selenium+TestNG+Maven 搭建
Java环境配置 Eclipse配置TestNG Eclipse配置Maven pom.xml文件相关配置,添加依赖selenium和TestNg的jar包 <!-- https://mvnre ...