| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2828 人关注过本帖
标题:想问个问题
只看楼主 加入收藏
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
to 9楼:
如果是下面那种情况,你的算法判断不出来
int cpg[] = {1,1, 1,2,3, 3,3,3};

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-02-26 22:39
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
to 7楼:
仅仅统计相临的元素不行,例如:1,2,3,    3,4,5
你的算法也判断不出来。

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-02-26 22:43
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
是的。

应为还没写。

—>〉Sun〈<—
2008-02-26 22:58
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
我的算法行吗? 如果变换位数 (把内外层循环 起始和终止都改一下).
2008-02-26 23:01
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
在你的程序里,你定义的那个数组不符合规则
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]]

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-02-26 23:35
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
收藏
得分:0 
这怪你说的不清楚这是扑克牌呀?我哪懂啊!
2008-02-26 23:52
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
麻将。。

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-02-27 00:02
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#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;
}
2008-02-27 10:32
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
我又做了一遍,你在看看是不是,你要的那个意思。。。。
2008-02-27 10:32
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
麻将的玩法
我想是这样的,如果手中现有牌已知,而对方打出一张牌,只需要电脑提示出自己要有所动作,然后自己选择:吃、对、杠、和,即可。

     这是我玩为数不多的电脑麻将所得到的经验,只是不知道LZ的意图是什么?为什么要判断只有2张相同的呢?
2008-02-27 11:59
快速回复:想问个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016651 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved