题目
是这样的,雀儿最近迷上了打麻将。但是她不知道怎么才能清一色和牌。麻将的清一色和牌规则是:雀儿手里有13张同一类型的牌(万、筒或索中的一种,从1到9),现在要再获得一张牌(共计14张)使牌型满足mAAA+nABC+DD(AAA表示三张相同的牌,ABC表示三张连续升序的牌,DD表示两张相同的牌,m+n=4)。现在请你帮助雀儿判断雀儿手中的牌能不能在再获得一张牌后和牌。如果能和牌,请帮她找出她需要哪张牌。
示例
#include <stdio.h>
#include <stdlib.h>
int Judge(int Pai[])
{
int Tip=0,jud,i;
int rPai[10];
for(i=1; i<10; i++)
rPai[i]=Pai[i];
for(i=1; i<10; i++)
{
Tip=rPai[i];
switch(Tip)//对剩余牌数判断,决定算法
{
case 3:
rPai[i]-=3;
case 0:
break;
case 4:
rPai[i]-=3;
case 2:
case 1:
if(rPai[i+1]&&rPai[i+2]&&(i<8))
rPai[i]--,rPai[i+1]--,rPai[i+2]--,jud=1;
else
jud=0;
break;
}
if(rPai[i]&&jud)
i--;
else if(jud==0)
return 0;
}
return 1;
}
int main()
{
int Pai[10],Q_Pai[10];
int in,i,j,tip;
printf("输入“1”开始程序:");
scanf("%d",&tip);
while(tip)
{
for(i=0; i<10; i++)
Pai[i]=Q_Pai[i]=0;
printf("\n输入雀儿手中的牌:");
for(i=0; i<13; i++)
scanf("%d",&in),Pai[in]++;//存1~9每种牌个数
for(i=1; i<10; i++)
{
if(Pai[i]!=4)
Pai[i]++;
else
continue;//判断该牌有没有被摸完,并摸牌测试
for(j=1; j<10; j++)
{
if(Pai[j]>=2)
Pai[j]-=2;
else
continue;//拿出对子,剩余肯定为三个刻子
if(Judge(Pai))//判断是不是三刻子
Q_Pai[i]=1;//Q_Pai做标记
Pai[j]+=2;//还原
}//循环
Pai[i]--;//还原
}
in=0,tip=1;
for(i=1; i<10; i++)
{
in+=Q_Pai[i];
if(in&&tip)
printf("\n雀儿可以和的牌有:"),tip=0;
if(Q_Pai[i])
printf("%d ",i);
}
if(in==0)
printf("\n雀儿不能和牌!");
printf("\n");
printf("________________________________________\n输入1继续判和\n输入0结束程序\n请输入:");
scanf("%d",&tip);
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)