如果是下面那种情况,你的算法判断不出来
int cpg[] = {1,1, 1,2,3, 3,3,3};
----------------解决方案--------------------------------------------------------
to 7楼:
仅仅统计相临的元素不行,例如:1,2,3, 3,4,5
你的算法也判断不出来。
----------------解决方案--------------------------------------------------------
是的。
应为还没写。
----------------解决方案--------------------------------------------------------
我的算法行吗? 如果变换位数 (把内外层循环 起始和终止都改一下).
----------------解决方案--------------------------------------------------------
在你的程序里,你定义的那个数组不符合规则
1,2,3, 3,9,9, 3,3应该这样组合才是:
1,2,3, 9,9, 3,3 这你的里面多了一个3
对了,这几个组合里面不能出现单张牌
只能是:一个对子(2张相同的牌,这种组合只能有一个),顺子(3张,如1,2,3),刻子(3张相同的牌,如1,1,1),杠子(4张相同的牌,如:1,1,1,1)
并且每个数字最多只能出现4次
现在的问题是:那个数组里面的数已经是组合好了的。只要从其中判断出有一个对子的组合即可。
[[it] 本帖最后由 随心 于 2008-2-26 23:37 编辑 [/it]]
----------------解决方案--------------------------------------------------------
这怪你说的不清楚这是扑克牌呀?我哪懂啊!
----------------解决方案--------------------------------------------------------
麻将。。
----------------解决方案--------------------------------------------------------
#include <iostream>
using namespace std;
bool IsDing(int *Pai, int n)
{
int Judge[2][1000]={{-1},{1}};
int *p1,*p2;
int i=0;
int flag=0;
p1=p2=Pai;
do
{
if(*p1==*(p2+1))
{
Judge[1][i]++;
p2=p2+1;
}
else
{
Judge[0][i]=*p1;
p1=p2+1;
i++;
}
}while(p1!=Pai+n);
for(int j=0;j<i;j++)
printf("Judge[0][%d]=%d,Judge[1][%d]=%d,\n",j,Judge[0][j],j,Judge[1][j]);
j=0;
do
{
switch(Judge[1][j])
{
case 1:
if(Judge[0][j]==Judge[0][j+1]-1&&Judge[0][j+1]==Judge[0][j+2]-1
&&Judge[1][j+1]==1)
{
printf("您的派是一副%d,%d,%d顺子.\n",Judge[0][j],Judge[0][j+1],Judge[0][j+2]);
if(Judge[1][j+2]==1)
j=j+3;
else
{
Judge[1][j+2]=Judge[1][j+2]-1;
j=j+2;
}
break;
}
else
{
printf("您的数据有问题!");
getchar();
break;
}
case 2:
printf("您的派是一副%d对子.\n",Judge[0][j]);
j=j+1;
flag++;
break;
case 3:
if(Judge[1][j+1]!=1)
{
printf("您的派是一副%d刻子.\n" , Judge[0][j]);
j=j+1;
break;
}
else if(Judge[1][j+1]==1&&Judge[0][j]==Judge[0][j+1]-1
&&Judge[0][j+1]==Judge[0][j+2]-1)
{
printf("您的派是一副%d对子.\n",Judge[0][j]);
Judge[1][j]=Judge[1][j]-2;
flag++;
break;
}
else
{
printf("您的数据有问题!\n");
getchar();
break;
}
case 4:
if(Judge[1][j+1]!=1)
{
printf("您的派是一副%d杠子.\n" , Judge[0][j]);
j=j+1;
break;
}
else if(Judge[1][j+1]==1&&Judge[0][j]==Judge[0][j+1]-1
&&Judge[0][j+1]==Judge[0][j+2]-1)
{
printf("您的派是一副%d刻子.\n",Judge[0][j]);
Judge[1][j]=Judge[1][j]-3;
break;
}
else
{
printf("您的数据有问题!\n");
getchar();
break;
}
}
}while(j<i);
return flag;
}
int main(void)
{
//例如这里要判断9,9这个组合是否存在
int cpg[] = {1,1,1,2,3,3,3,3,4,5,9,9,9}; //不仅仅是这些,还可以任意组合
if (IsDing(cpg, sizeof(cpg)/sizeof(int)))
cout << "有" << endl;
else
cout << "没有" << endl;
return 1;
}
----------------解决方案--------------------------------------------------------
我又做了一遍,你在看看是不是,你要的那个意思。。。。
----------------解决方案--------------------------------------------------------
麻将的玩法
我想是这样的,如果手中现有牌已知,而对方打出一张牌,只需要电脑提示出自己要有所动作,然后自己选择:吃、对、杠、和,即可。这是我玩为数不多的电脑麻将所得到的经验,只是不知道LZ的意图是什么?为什么要判断只有2张相同的呢?
----------------解决方案--------------------------------------------------------