麻将算法
时间: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 }
- Android6.0运行时权限的处理及解决办法
- 操作系统指纹识别概述
- Android 内存泄露简介、典型情景及检测解决
- [原创]Fluent NHibernate之旅
- 复杂而艰辛的重构之路--起步
- 【强烈推荐】数据库迁移利器:Migrator.Net
- 关于某道C#上机题的OO
- Android 事件处理探险
- Fluent NHibernate RC 1.0 --升级内容
- 驳“反驳老赵之“伪”递归”
- 关于今天很热的--FizzBuzzWhizz
- 了解EF CodeFirst的Migrator功能与Migrator.Net对比
- struts技术的logic标签
- 【翻译】使用Visual Studio创建Asp.Net Core MVC (一)
- 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 数组属性和方法
- Run和Start的区别,线程的生命周期,优先级,礼让和守护线程
- RestFul 风格操作文档
- DOM的核心总结
- 移动端WEB开发之响应式布局
- css基础选择器
- CSS外观属性
- serverless 部署egg的layer组件,整个node_modules上传报错
- HTML标签
- 给IMX6ULL编译鸿蒙Liteos-a
- 鸿蒙源码下载并编译
- g2o、Eigen、Mat矩阵类型转换
- 相见恨晚!OLAP数仓基础入门大全
- Activiti7 流程变量(UEL-Value方式)
- 给IE9及其以下等不支持classList属性的浏览器,添加classList属性
- Docker使用手册 嵌入式Linux环境搭建