| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 30182 人关注过本帖
标题:麻将胡牌算法
取消只看楼主 加入收藏
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
回复 20楼 azzbcc
谢谢你,看来看别人的东西更累,代价要高。

www.qunxingw.wang
2013-01-16 15:23
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
回复 22楼 azzbcc
首先感谢参与。我对你的程序弱弱的能理解一点,整体上应该是一个不错的思路,在不加tmep2[0]=0的情况下,测试胡牌的都可以找到。加后也有问题,
同时测试数据:    0 2 3 2 2 2 1 1 1 0
                  0 3 3 3 3 0 1 0 1 0

www.qunxingw.wang
2013-01-17 12:20
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
回复 26楼 azzbcc
我有个老同学,他处理牌有你相同的方法 我也还没细看,一起粘在此吧。
程序代码:
#include<iostream> 
using namespace std;
int main()
{
int i,x,flat=1;
    int b[14]={1,2,3,4,4,4,5,5,5,5,6,7,8,9};// 牌无需排序。

    int a[10]={0};
    for(i=0; i<14; i++)
    {
        a[b[i]-1]++;    //统计每种牌的数量
    }
    int xi,a2[10];
    for (x=0; x<10; x++)  //循环找一对将牌
    {
        for(i=0;i<10;i++)
            a2[i]=a[i];
        if(a2[x]>=2 )//,除掉将牌
        {
          a2[x]-=2;
        }
        else continue;
        xi=0;
        flat=1;
        for(i=0; i<10; i++)                     //找出连续或相同的三个数
        {
            if(a2[i]>=3)
            {
                a2[i]-=3;
                xi+=3;
            }
            if((a2[i]>0)&&(i>=8))
            {
                flat=0;
                break;
            }
            if(a2[i]==2)
               {
                   if((a2[i+1]>1)&&(a2[i+2]>1))
                   {
                       a2[i]-=2;
                       a2[i+1]-=2;
                       a2[i+2]-=2;
                   }
                   else
                   {
                       flat=0;
                       break;
                   }
               }
            else if(a2[i]==1)
               {
                   if((a2[i+1]>0)&&(a2[i+2]>0))
                   {
                       a2[i]--;
                       a2[i+1]--;
                       a2[i+2]--;
                   }
                   else
                   {
                       flat=0;
                       break;
                   }
               }
        }
        if(flat==1)
                   break;
   }
          if(flat)  cout<<"恭喜您!已胡牌!"<<endl;
          else     cout<<"对不起!不能胡牌!"<<endl;

    return 0;

}

www.qunxingw.wang
2013-01-18 23:17
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
谢谢你的关注。19楼b数组大部分时候都用不上,从以前数据测试可以看出来。不过每次判断不胡牌时必竞修改了a数组的值。有时总是在最后选将时会出现错误。所以一不做二不休的,在后面如果不胡时,重新通过b还原a数组,以便选择下对将。

www.qunxingw.wang
2013-01-19 18:55
快速回复:麻将胡牌算法
数据加载中...
 
   



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

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