麻将算法
时间:2022-05-05
本文章向大家介绍麻将算法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
麻将胡牌算法(不带赖子)(2天)
编码:(假设一副牌只有筒子 1表示1筒 2表示2筒。。。。 9表示9筒)
要求:
1)七对算法(判断14张牌是否是7对)
2)碰碰胡算法(判断14张牌是否是碰碰胡)
3)屁胡算法(判断14张牌是否是屁胡)
用户输入14张牌值,要求判断出这14张牌是否满足上述3种牌型(可能同时满足上述3种牌型)
解答: 单纯的模拟题 简单的搜索(0(2^log2(n)))
1 #define Local
2 #include<stdio.h>
3 #include<stdlib.h>
4 #include<string.h>
5 #include<time.h>
6
7
8 int arg [14]= {0};
9
10
11 int cmp(const void * arg ,const void *brg){
12
13 int * ar = (int *)arg;
14 int * br = (int *)brg;
15 return *ar - *br ;
16 }
17
18 //初始化
19 void init( int A[] ){
20 int i;
21 srand( time(NULL) );
22 for(i=0 ; i<14 ; i++)
23 i[arg] = rand();
24 }
25
26 //七对胡牌
27 bool AlgSevenHu(int tmp[]){
28 int i;
29 for(i=1 ; i<10 ;i++)
30 if(tmp[i]&1) return false ; //不是七对
31 return true;
32 }
33
34 //碰碰胡
35 bool AlgPengpHu(int tmp[]){
36
37 int i=0 , cnt=0;
38 //判断门将
39 for( i=1 ; i<10 ; i++ ){
40
41 if(tmp[i]==0||tmp[i]==3);
42 else if(tmp[i]==2) cnt++;
43 else return false ;
44 }
45 if(cnt==1)
46 return true;
47 return true;
48 }
49
50 //平胡
51 bool AlgPinghHu(int tmp [] , int len){
52
53 //qsort(A , 14 ,sizeof(A[0]) , cmp); //升序
54 //return dfs(A, 14);
55 bool tag = false;
56 int i;
57 for(i=1 ; i<10 ; i++){
58
59 if(tmp[i]>2){
60 tmp[i]-=3; //AAA组合
61 len-=3;
62 tag = AlgPinghHu(tmp , len);
63 tmp[i]+=3;
64 len+=3;
65 if(tag) return true;
66 //或者这样的组合
67 if(tmp[i+1]>0&&tmp[i+2]>0){
68 tmp[i]--;
69 tmp[i+1]--;
70 tmp[i+2]--;
71 len-=3;
72 tag = AlgPinghHu(tmp , len);
73 tmp[i]++;
74 tmp[i+1]++;
75 tmp[i+2]++;
76 len+=3;
77 if(tag) return true;
78 }
79 }
80 if(tmp[i]>0){
81 //ABC组合
82 if(len>2&&tmp[i+1]>0&&tmp[i+2]>0){
83 tmp[i]--;
84 tmp[i+1]--;
85 tmp[i+2]--;
86 len-=3;
87 tag= AlgPinghHu(tmp , len);
88 tmp[i]++;
89 tmp[i+1]++;
90 tmp[i+2]++;
91 len+=3;
92 if(tag) return true;
93 }
94
95 if(len==2){
96 if(tmp[i]==2)
97 return true ;
98 return false;
99 }
100 }
101 }
102 return false ;
103 }
104
105 void print(int A[]){
106 int i=0;
107 for(i=0 ; i<13 ;i++ )
108 printf("%d ",A[i]);
109 printf("%dn",A[13]);
110 }
111 int main(int argv , char * args [] ){
112
113 char hopg[2];
114 //init(arg);
115 bool pi=0 ,pe=0 ,qi=0;
116 int i=0,tmp[10]={0};
117 #ifdef Local
118 freopen("data.in","r",stdin);
119 #endif // Local
120
121 while(1){
122
123 printf("输入14张牌号:n");
124 for( i=0;i<14 ;i++)
125 scanf("%d",arg+i);
126 print(arg);
127 memset(tmp , 0, sizeof(tmp));
128
129 for( i=0;i<14;i++) tmp[arg[i]]++;
130 pi =AlgPinghHu(tmp ,14);
131 pe =AlgPengpHu(tmp);
132 qi = AlgSevenHu(tmp);
133
134 if(pi)
135 printf("祝贺 ,屁胡!n");
136 if(pe)
137 printf("祝贺 , 碰碰胡!n");
138 if(qi)
139 printf("祝贺,七对胡n");
140 if(!pi&&!pe&&!qi)
141 printf("未能胡牌!n");
142
143 puts("继续游戏 y/n ?");
144 scanf("%s",hopg);
145
146 if(hopg[0]=='n'||hopg[0]=='N')
147 break;
148 }
149 return 0;
150 }
- Redis 实现接口访问频率限制
- Nginx 配置文件安全分析
- 一个写SQL语句的便利工具
- OpenFlow网络中的路由服务
- Python中萌新不知道的小魔法(一)
- 基于Scrapy的全球最大成人网站PornHub爬虫
- Python标准库笔记(7) — copy模块
- Python项目实战——开发网易云音乐插件
- 将已有项目代码通过命令行方式上传到github,简易傻瓜教程(图文)将已有项目代码通过命令行方式上传到github,傻瓜教程(图文)1. 创建一个github项目2. 在Repository name
- mac执行git命令出现xcrun: error: invalid active developer path解决方法
- centos修改主机名
- SSH免密登录,RSA认证登录
- Zookeeper安装部署调试命令
- Facebook 直播是如何承受海量压力的?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 我是这么以非root安装R语言和相关packages的
- Vuex详细教程
- 线程池submit和execute,搞不好会引发线上故障
- Window open使用教程
- kafka发送客户端在高并发场景下如何保证不频繁GC的
- 几个小细节帮你提升java代码运行效率
- spring data操作ES简直不能再香
- 国防科大提出基于可变形三维卷积(D3Dnet)的视频超分辨,代码已开源
- 不要被kafka的异步模式欺骗了
- 给你总结几个ES下最容易踩的坑
- ES系列之利用filter让你的查询效率飞起来
- ES主分片和副本数据大小不一样的情况
- 关于kibana的可视化可能都在这篇文章里了
- ES分页看这篇就够了
- ES系列之原来查看文档数量有这么多姿势