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. "",
  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[],c[];
  15.  
  16. int mjid(char str[])
  17. {
  18. int i,j;
  19. for(i=;i<=;i++)
  20. {
  21. if(strcmp(mahjong[i],str)==)
  22. {
  23. return i;
  24. }
  25. }
  26. }
  27.  
  28. int Search(int m)
  29. {
  30. int i,j;
  31. for(i=;i<=;i++)
  32. {
  33. if(c[i]>=)
  34. {
  35. if(m==) return ;
  36. c[i]-=;
  37. if(Search(m+)==) return ;
  38. c[i]+=;
  39. }
  40. }
  41. for(i=;i<=;i++)
  42. {
  43. if(i%<= && i%!= && c[i]>= && c[i+]>= && c[i+]>=)
  44. {
  45. if(m==) return ;
  46. c[i]--,c[i+]--,c[i+]--;
  47. if(Search(m+)==) return ;
  48. c[i]++,c[i+]++,c[i+]++;
  49. }
  50. }
  51. return ;
  52. }
  53.  
  54. int hu()
  55. {
  56. int i,j;
  57. for(i=;i<=;i++)
  58. {
  59. if(c[i]>=)
  60. {
  61. c[i]-=;
  62. if(Search()==)
  63. return ;
  64. c[i]+=;
  65. }
  66. }
  67. return ;
  68. }
  69. int main()
  70. {
  71. int i,j;
  72. char str[];
  73. int cas=;
  74. while(scanf("%s",str)!=EOF)
  75. {
  76. if(str[]=='')
  77. break;
  78.  
  79. mj[]=mjid(str);
  80. for(i=;i<=;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=;i<=;i++)
  90. {
  91. memset(c,,sizeof(c));
  92. for(j=;j<=;j++)
  93. c[mj[j]]++;
  94. if(c[i]>=) continue;
  95.  
  96. c[i]++;
  97. if(hu()==)
  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 ;
  110. }

UVA 11210 中国麻将的更多相关文章

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

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

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

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

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

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

  4. UVa 11210 - Chinese Mahjong

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

  5. Chinese Mahjong UVA - 11210 (DFS)

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

  6. UVa11210 中国麻将 Chinese Mahjong-搜索

    https://vjudge.net/problem/UVA-11210 //被水题虐了一上午... #include<iostream> #include<cstdio> # ...

  7. UVa 11210 (DFS) Chinese Mahjong

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

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

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

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

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

随机推荐

  1. Java提高篇——单例模式

    介绍 在我们日常的工作中经常需要在应用程序中保持一个唯一的实例,如:IO处理,数据库操作等,由于这些对象都要占用重要的系统资源,所以我们必须限制这些实例的创建或始终使用一个公用的实例,这就是我们今天要 ...

  2. Android四大核心组件之ContentProvider

    实验内容 学习ContextProvider用法 编码实现简单ContextProvider功能 实验要求 通过简单代码了解ContextProvider功能和用法 实验步骤 ContextProvi ...

  3. boost any库

    转: 原理 c++是一个强类型的语言,要实现一个万能类型可以考虑用void*来保存数据,然后用类型转换进行操作,如: class MyAny{ MyAny(void* input):content_( ...

  4. c#字符显示转换{0:d}

    C#:String.Format数字格式化输出 : int a = 12345678; //格式为sring输出// Label1.Text = string.Format("asdfads ...

  5. 开始学习bizTalk server了

    开始学习bizTalk Server 2013 R2了,有兴趣的朋友可以关注我,一同学习

  6. 目标检测方法总结(R-CNN系列)

    目标检测方法系列--R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD 目录 相关背景 从传统方法到R-CNN 从R-CNN到SPP Fast R-CNN ...

  7. matlab GUI界面编程总结

    去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录. 从简单的例子说起吧. 创建Matlab ...

  8. C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...

  9. MVC3 数据验证用法之密码验证设计思路

    描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近在公司用mvc做了一个修改密码 ...

  10. window10 安装SVN 提示权限问题

     http://www.yishimei.cn/network/551.html 经常在网上看到有同学反映,他们在控制面板里卸载软件的时候,总是会出现2502.2503错误代码的问题,并且这个问题大多 ...