资源简介
通过递归的算法实现四川麻将的胡牌算法,这里讲所有的牌进行排序,并调用递归的算法,判定这十四张牌是否能胡,能够成功运行。
代码片段和文件信息
// Mahjong.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
/************************************************************************
排序:将条万筒分别排序,并保存在原有的数组中
************************************************************************/
void sort(char *pint n)
{
int ij;
char temp;
if (n < 2) return;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if(p[j]>p[j+1])
{
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
return ;
}
/*******************************************************************************
找出相同的三个连续的牌,如果找到就剔除这三个牌,并返回真,
传递进来的数组元素比原来少了3个
如果没有,返回假
*******************************************************************************/
bool Group3Same(char *pint n)
{
char * q;
int sp=0;
int ij;
q = p;
if (n == 0)
{
return true;
}
for(i = 0; i < n - 2; i++)
{
if (*(q + i + 1) == *(q + i)&& *(q + i + 2) == *(q + i + 1))
{
if (i == n - 3 ) //把这三个元素移除,把后面的元素往前移动三格
{
*(q+i) = ‘\0‘;
p = q;
return true;
}
else
{
for (j = i;j < n - 3; j++)
{
*(q + j) = *(q + j + 3) ;
}
*(q+j) = ‘\0‘;
p = q;
return true;
}
}
}
return false;
}
/*******************************************************************************
找出顺子,没找到一组顺子就把顺子剔除,最后,返回数组中剩余的元素的个数,如果返回值为0,
能够组合成若干个顺子,可以胡牌,否则,不能组合成顺子,不能胡牌
*******************************************************************************/
int Group3Shunzi(char *pint n)
{
char *q*w;
int ijkmlsp = 0;
m=0;
q = p;
w = p;
if ( n == 0)
{
return 0;
}
for(i = 0; i < n - 2; i++)
{
for (j = i+1;j < n - 1; j++ )
{
if (*(q + j) - *(q + i) == 1)
{
for (k = j + 1; k < n ; k++ )
{
if (*(q + k) - *(q + j) == 1)
{
if (i == n - 3 ) //把这三个元素移除,把后面的元素往前移动三格
{
*(q+i) = ‘\0‘;
n -= 3;
i--;
break;
}
else
{
*(q + i) = ‘0‘;
*(q + j) = ‘0‘;
*(q + k) = ‘0‘;
for (m = 0l = 0;l < n ; l++)
{
if (*(q + l) != ‘0‘)
{
*(w + (m++)) = *(q + l);
}
}
n = m;
q = w;
i--;
break;
}
}
}
}
continue;
}
}
return n;
}
/************************************************************************
递归调用组合函数
每次先进行顺子组合,若不能成功,再进行三个相同的组合
找到一组三个相同的组合,在递归调用本函数,不断的进行顺子-三个相同 顺子-三个相同
递归的次数不会超过四次,因为只有12张牌,每一次找到三个相同的牌,都会减少三张牌
************************************************************************/
bool Group3S(char *p int n)
{
char pp[14]p2[14];
int ij;
for (i = 0;i < n;i++)
{
pp[i] = *(p + i);
p2[i] = *(p + i);
}
bool flag = false;
if (n == 0)
{
return true;
}
if(!Group3Shunzi(pn))
return true;
if (Group3Same(p2n)) //顺子出错,就看看有没有三个相同的,有就把三个相同的挑出来,在进行顺子算法
{
n -= 3;
flag = Group3S(p2n);
}
return flag;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-09-10 16:31 Mahjong\
目录 0 2012-09-10 16:31 Mahjong\Debug\
文件 33792 2012-09-10 16:31 Mahjong\Debug\Mahjong.exe
文件 309368 2012-09-10 16:31 Mahjong\Debug\Mahjong.ilk
文件 461824 2012-09-10 16:31 Mahjong\Debug\Mahjong.pdb
目录 0 2012-09-10 16:31 Mahjong\Mahjong\
文件 486400 2012-09-10 16:31 Mahjong\Mahjong.ncb
文件 887 2012-09-10 16:30 Mahjong\Mahjong.sln
文件 12800 2012-09-10 16:31 Mahjong\Mahjong.suo
目录 0 2012-09-10 16:31 Mahjong\Mahjong\Debug\
文件 12298 2012-09-10 16:31 Mahjong\Mahjong\Debug\BuildLog.htm
文件 663 2012-09-10 16:31 Mahjong\Mahjong\Debug\Mahjong.exe.em
文件 728 2012-09-10 16:31 Mahjong\Mahjong\Debug\Mahjong.exe.em
文件 621 2012-09-10 16:31 Mahjong\Mahjong\Debug\Mahjong.exe.intermediate.manifest
文件 14564 2012-09-10 16:31 Mahjong\Mahjong\Debug\Mahjong.obj
文件 3211264 2012-09-10 16:31 Mahjong\Mahjong\Debug\Mahjong.pch
文件 67 2012-09-10 16:31 Mahjong\Mahjong\Debug\mt.dep
文件 12193 2012-09-10 16:31 Mahjong\Mahjong\Debug\stdafx.obj
文件 68608 2012-09-10 16:31 Mahjong\Mahjong\Debug\vc90.idb
文件 126976 2012-09-10 16:31 Mahjong\Mahjong\Debug\vc90.pdb
文件 6152 2012-09-10 16:31 Mahjong\Mahjong\Mahjong.cpp
文件 4498 2012-09-10 16:30 Mahjong\Mahjong\Mahjong.vcproj
文件 1427 2012-09-10 16:31 Mahjong\Mahjong\Mahjong.vcproj.XP-201109211453.Administrator.user
文件 1183 2012-09-10 16:30 Mahjong\Mahjong\ReadMe.txt
文件 212 2012-09-10 16:30 Mahjong\Mahjong\stdafx.cpp
文件 233 2012-09-10 16:30 Mahjong\Mahjong\stdafx.h
文件 498 2012-09-10 16:30 Mahjong\Mahjong\targetver.h
目录 0 2019-06-12 15:54 Mahjong\新建文件夹\
- 上一篇:xm
l课程设计代码 - 下一篇:右键菜单生成文件夹内容列表
评论
共有 条评论