当前位置: 代码迷 >> C语言 >> 想问个问题
  详细解决方案

想问个问题

热度:206   发布时间:2008-02-26 22:39:41.0
to 9楼:
如果是下面那种情况,你的算法判断不出来
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张相同的呢?
----------------解决方案--------------------------------------------------------