满意答案
ling0926520
推荐于 2017.11.26
组成胡牌的规则只有两种,三个相同或者三个排成顺序(也就是相邻)
可能有很多对,那么分别挑出,这个是必须的,剩下的赋值新的数组中,这是这个新的数组有12个数据
如定义
int guize1(int *b) //这里b有三个数据,三个数相同
{
if(b[0]==b[1]&&b[1]==b[2]&&b[0]==b[1])
return 1;
return 0; //这里加不加else都可以
}
int guize2(int *c) //这里c有三个数据,三个数是顺序的
{
int x[3];
int i,j,t;
for(i=0;i<3;i++) //赋值新的数组,因为数组数组改变可以影响到调用它的函数中的数值
x[i]=c[i];
for(i=0;i<3;i++) //x数值排序,随便选一个,我的可能不对,呵呵
for(j=i+1;j<3;j++)
if(x[i]
{
t=x[i];
x[i]=x[j];
x[j]=t;
}
if(x[0]=x[1]-1&&x[1]==x[2]-1) //顺序的话返回1
return 1;
return 0;
}
int huipai(int *a) //这里a数组有12个数据
{
//这里就需要枚举了,没别的办法
int i,j,k;
int y[3];
for(i=0;i<10;i++)
for(j=i+1;j<11;j++)
for(k=j+1;k<12;k++) //这三个循环就是所有的情况吧,你想想
{
y[0]=a[i];
y[1]=a[j];
y[2]=a[k];
if(guize1(y)||guize2(y)) //判断是否构成关系,直接调用子函数即可
return 1;
}
}
主函数中调用子函数的程序
int pai[14] ; //这里放14个数据,初始化自己搞定
int hpai[12];
//排序14个数据自己搞定
int i,j,k;
for(i=0;i<13;i++)
{
if(pai[i]==pai[i+1]) //如果有对
{
k=0;
for(j=0;j
hpai[k++]=pai[j];
for(j=i+2;j<14;j++)
hpai[ k++]=pai[j];
}
if(hupai(hpai))
printf("yes");
else
printf("no");
}
00分享举报