UVA 11210 中国麻将

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2151

http://7xjob4.com1.z0.glb.clouddn.com/f1186ae9a93d903ab533e5fce524bac6

题意:给你一副手牌,输出这手牌所有的听牌

思路:枚举所有34种牌,依次判断是否听这牌,先枚举选出将,再枚举顺子、刻子等,递归判断。

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3
  4 const char *mahjong[]={
  5 "0",
  6 "1T","2T","3T","4T","5T","6T","7T","8T","9T",
  7 "1S","2S","3S","4S","5S","6S","7S","8S","9S",
  8 "1W","2W","3W","4W","5W","6W","7W","8W","9W",
  9 "DONG","NAN","XI","BEI",
 10 "ZHONG","FA","BAI",
 11 };
 12
 13 int n;
 14 int mj[15],c[35];
 15
 16 int mjid(char str[])
 17 {
 18     int i,j;
 19     for(i=1;i<=34;i++)
 20     {
 21         if(strcmp(mahjong[i],str)==0)
 22         {
 23             return i;
 24         }
 25     }
 26 }
 27
 28 int Search(int m)
 29 {
 30     int i,j;
 31     for(i=1;i<=34;i++)
 32     {
 33         if(c[i]>=3)
 34         {
 35             if(m==4)    return 1;
 36             c[i]-=3;
 37             if(Search(m+1)==1)  return 1;
 38             c[i]+=3;
 39         }
 40     }
 41     for(i=1;i<=25;i++)
 42     {
 43         if(i%9<=7 && i%9!=0 && c[i]>=1 && c[i+1]>=1 && c[i+2]>=1)
 44         {
 45             if(m==4)    return 1;
 46             c[i]--,c[i+1]--,c[i+2]--;
 47             if(Search(m+1)==1)  return 1;
 48             c[i]++,c[i+1]++,c[i+2]++;
 49         }
 50     }
 51     return 0;
 52 }
 53
 54 int hu()
 55 {
 56     int i,j;
 57     for(i=1;i<=34;i++)
 58     {
 59         if(c[i]>=2)
 60         {
 61             c[i]-=2;
 62             if(Search(1)==1)
 63                 return 1;
 64             c[i]+=2;
 65         }
 66     }
 67     return 0;
 68 }
 69 int main()
 70 {
 71     int i,j;
 72     char str[10];
 73     int cas=1;
 74     while(scanf("%s",str)!=EOF)
 75     {
 76         if(str[0]==‘0‘)
 77             break;
 78
 79         mj[1]=mjid(str);
 80         for(i=2;i<=13;i++)
 81         {
 82             scanf("%s",str);
 83             mj[i]=mjid(str);
 84         }
 85
 86         printf("Case %d:",cas++);
 87
 88         bool flg=false;
 89         for(i=1;i<=34;i++)
 90         {
 91             memset(c,0,sizeof(c));
 92             for(j=1;j<=13;j++)
 93                 c[mj[j]]++;
 94             if(c[i]>=4)  continue;
 95
 96             c[i]++;
 97             if(hu()==1)
 98             {
 99                 flg=true;
100                 printf(" %s",mahjong[i]);
101             }
102             c[i]--;
103         }
104
105         if(!flg)
106             printf(" Not ready");
107         printf("\n");
108     }
109     return 0;
110 }

时间: 2024-10-12 03:57:51

UVA 11210 中国麻将的相关文章

uva 11210 Chinese Mahjong(暴力枚举)

uva 11210 Chinese Mahjong Mahjong () is a game of Chinese origin usually played by four persons with tiles resembling dominoes and bearing various designs, which are drawn and discarded until one player wins with a hand of four combinations of three

UVA 11210 Chinese Mahjong(中国麻将 , 大模拟)

解题思路: 关键在于如何判断十四张牌能否和牌,这里采用dfs来判断,详情看代码. #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map>

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

简单的回溯题 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 char *mahjong[]={ 8 "1T","2T","3T","4T","5T","6T","

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

题意:这个题意.有点麻烦,就是说给定13张牌,让你求能“听”的牌.(具体的见原题) 原题链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2151 析:看到这个题,真是麻烦啊,我又不懂麻将,看了好久才明白什么是“听”.分析一下思路. 首先对所有的牌都进行编号,然后暴力,首先的是先判断是哪个是将,然后再进一步判断, 哪一个是刻子,和顺子

UVA 11210 Chinese Mahjong

#include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cctype> #include <cstdio> #include <string> #inc

UVa 11210 (DFS) Chinese Mahjong

大白书第一章的例题,当时看起来很吃力,现如今A这道题的话怎么写都无所谓了. 思路很简单,就是枚举胡哪张牌,然后枚举一下将牌,剩下如果能找到4个顺子或者刻子就胡了. 由于粗心,34个字符串初始化写错,各种WA. 1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <iostream> 5 using namespace std; 6 7 int a[13], c[34]

[补档]从OI学麻将

背景 作为一名川娃子,怎么能不懂麻将呢= = T1 さきなに~~ [咲 -Saki-] 天才麻将少女什么编 题目 二十一世纪,世界上的麻将竞技人数超过一亿,日本每年也有大规模的全国大赛来对麻将选手进行选拔.从小学到高中,很多学校也设立了麻将部. <天才麻将少女阿知贺篇 episode of side-A>『咲 -Saki- 阿知賀編 episode of side-A』是<天才麻将少女>『咲 -Saki-』的外传,从另一个视角讲述麻将少女们的故事.故事背景设定在<天才麻将少女

spring-boot 参数长度、文件上传大小限制问题

spring boot 设置tomcat post参数限制 1.外置tomcat: 这个简单,直接在server.xml里面修改这句话: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxPostSize="0"/> 没错就是修改这里的maxPostSize的值,

【分享】近4000份数学学习资源免费分享给大家

一直以来喜欢收集数学类的教程资源,于是费了好大劲从万千合集站上扒拉了下来,总结归类了一下,一共有将近4000本电子书.经测试,均可免费下载,可能会弹出小广告,可不必理会之.[仅供学术学习和交流,请无用于商业用途.]另外,如有可能,还请尽量支持正版纸质书.   数学史(54)     数学史.rar 55.6 MB   数学的起源与发展.rar 4.3 MB   费马大定理—一个困惑了世间智者358年的谜.pdf 9.5 MB   通俗数学名著译丛14-无穷之旅:关于无穷大的文化史.pdf 14.