亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mjpai.cpp

?? 九江麻將源代碼
?? CPP
字號:
#include"mjpai.h"
#include <algorithm>
//#define NDEBUG   //不要assert
#include <assert.h>

int comparemj(const mjpai m1,const mjpai m2){
    assert(m1!=0&&m2!=0);
    int a,b,c;

    a=m1.mj; b=m2.mj;  c=a-b;

    if(a==b) return 0;
    if(m1.iszi()&&m2.iszi())return 50;
    if(c>8||c<-8)
        return 100;
    else return c;
}

bool mjpai::iswan()const
{assert(mj);return (mj>=11&&mj<=19)?true:false;}

bool mjpai::istiao()const
{assert(mj);return (mj>=31&&mj<=39)?true:false;}

bool mjpai::isbing()const
{assert(mj);return (mj>=51&&mj<=59)?true:false;}

bool mjpai::iszi()const
{assert(mj);return (mj>=71&&mj<=91)?true:false;}

bool isonecolor(const mjpai *pmj_arr,const int i_num){
    int i_flag=0;
    int i_cmp;

    int i_firstnotfa=0;
    while(pmj_arr[i_firstnotfa]==mjpai(mjpai::fa)) i_firstnotfa++;

    if(pmj_arr[i_firstnotfa].iszi()) return false;
    for(int i=1;i<i_num;i++){
        if(pmj_arr[i]==mjpai(mjpai::fa))continue;
        i_cmp=comparemj(pmj_arr[i],pmj_arr[i_firstnotfa]);
        if(i_cmp==100){
            i_flag=1;
            break;
        }
    }

    return i_flag?false:true;
}
bool isonecolororzi(const mjpai *pmj_arr,const int i_num){
    int i_flag=0;
    int i,i_cmp;
    for(i=0;i<i_num;i++)
        if(!pmj_arr[i].iszi())
            break;

    if(i==i_num)return true;
    int i_firstnotzi=i;

    for(i=0;i<i_num;i++){
        i_cmp=comparemj(pmj_arr[i],pmj_arr[i_firstnotzi]);
        if(i_cmp==100&&!pmj_arr[i].iszi()){
            i_flag=1;
            break;
        }
    }
    return i_flag?false:true;
}

int pengandgang(const mjpai *pmj_arr,const int i_num,const mjpai mj)
{
    int flag[5];//flag[2]記錄相同牌個數 3為牌堆中比此牌大一的      
    int i,i_cmp;
    for (i=0;i<5;i++) flag[i]=0;

    for(i=0;i<i_num;i++)
    {
        i_cmp=comparemj(pmj_arr[i],mj);
        if(i_cmp>=-2&&i_cmp<=2)
            flag[i_cmp+2]++;
    }

    if(flag[2]==2)return 1;
    else if(flag[2]==3)return 2;
    else return 0;
}

static bool hupai1(int * pi_mj,int i_num,int *pi_select)
{    //pi_select[]用于在遞歸調用時記錄已經訪問過的牌
     int i,j,k;
     int i_max,i_min,i_mid;
     int i_mark1,i_mark2;//,i_sum;

     int i_have3=0;  //int i_i;


     for(i=0;i<i_num;i++){
        if(pi_select[i])continue;
        else i_mark1=i;

        for(j=i+1;j<i_num;j++){
            if(i==j)continue;

            if(pi_select[j]) continue;
            else i_mark2=j;

            for(k=j+1;k<i_num;k++){
                if(i==k||j==k)continue;

                if(pi_select[k])continue;
                i_have3=1;   //說明可以找到3張未選擇過的牌,
                //如果最后i_have3==0
                //說明此時只有2張牌了.下面可以用i_mark1,i_mark2獲得此二張.

                i_max=0;i_min=100;
                i_max=std::max(pi_mj[i],std::max(pi_mj[j],pi_mj[k]));
                i_min=std::min(pi_mj[i],std::min(pi_mj[j],pi_mj[k]));
                i_mid=(i_max+i_min)/2;

                if(pi_mj[i]==pi_mj[j]&&pi_mj[i]==pi_mj[k])  //刻子
                    ;
                else if(i_max-i_min==2&&(pi_mj[i]==i_mid||pi_mj[j]==i_mid||pi_mj[k]==i_mid))//順子
                    ;
                else
                    continue;

                pi_select[i]=pi_select[j]=pi_select[k]=1; //記錄下來 下面遞歸

                if(!hupai1(pi_mj,i_num,pi_select)){
                    pi_select[i]=pi_select[j]=pi_select[k]=0; //遞歸一次結束,返回
                     continue;
                }
                return 1;//選擇的3張成刻、順,而剩下的和了
            }
            //只剩兩張牌
            if(!i_have3&&pi_mj[i_mark1]==pi_mj[i_mark2])return 1;
            //只剩兩張,相等

        }
      }


      return 0;

}
bool hupai(const mjpai *pmj_arr,const int i_num)
{
    if(i_num>14) return 0;
    if(i_num%3!=2)return 0;//牌數應為3n+2

    int ia_mj[14];
    int i,j;
    for(i=0;i<i_num;i++)
        ia_mj[i]=(mjpai)pmj_arr[i];

    int ia_selected[14];

    for(i=0;i<i_num;i++) ia_selected[i]=0;

    int i_sum=0;
    if(i_num==14){//看看是不是七對
        for(i=0;i<i_num;i++){
            if(ia_selected[i])continue;
            for(j=i+1;j<i_num;j++){
                if(ia_selected[j]||j==i)continue;

                if(ia_mj[i]==ia_mj[j]){
                    ia_selected[i]=ia_selected[j]=1;
                    i_sum++;
                    break;
                }
            }
            if(ia_selected[i]==0)break;
         }
    }
    if(i_sum==7)return true;
    //mishel(ia_mj,i_num);

    //int ia_selected[14];

    for(i=0;i<i_num;i++) ia_selected[i]=0;
    return hupai1(ia_mj,i_num,ia_selected);

}

int hu(const mjpai *pmj_arr, int i_num,const mjpai mj)
{
    if(i_num>13) return 0;
    if(i_num%3!=1)return 0;//牌數應為3n+1

    int ia_mj[14];
    int i,j;
    for(i=0;i<i_num;i++)
        ia_mj[i]=(mjpai)pmj_arr[i];

    ia_mj[i]=(mjpai)mj;
    i_num++;

    int ia_selected[14];

    for(i=0;i<i_num;i++) ia_selected[i]=0;

    int i_sum=0;
    if(i_num==14){//看看是不是七對
        for(i=0;i<i_num;i++){
            if(ia_selected[i])continue;
            for(j=i+1;j<i_num;j++){
                if(ia_selected[j]||j==i)continue;

                if(ia_mj[i]==ia_mj[j]){
                    ia_selected[i]=ia_selected[j]=1;
                    i_sum++;
                    break;
                }
            }
            if(ia_selected[i]==0)break;
         }
    }
    if(i_sum==7)return true;
    //mishel(ia_mj,i_num);

    //int ia_selected[14];

    for(i=0;i<i_num;i++) ia_selected[i]=0;
    return hupai1(ia_mj,i_num,ia_selected);

}

bool duting(const mjpai *pmj_arr,const int i_num)
{
    if(i_num%3!=1)return false ;
    int i_sum=0;
    int mj;

    for(mj=11;mj<20;mj++)
        if(hu(pmj_arr,i_num,mj))
            if(i_sum!=0)
                return false;
            else
                i_sum++;
    for(mj=31;mj<40;mj++)
        if(hu(pmj_arr,i_num,mj))
            if(i_sum!=0)
                return false;
            else
                i_sum++;
    for(mj=51;mj<60;mj++)
        if(hu(pmj_arr,i_num,mj))
            if(i_sum!=0)
                return false;
            else
                i_sum++;
    for(mj=71;mj<=91;mj+=10)
        if(hu(pmj_arr,i_num,mj))
            if(i_sum!=0)
                return false;
            else
                i_sum++;
    return true;

}

int qidui(const mjpai *pmj_arr,const int i_num)
{
    int i,j,k;
    
    if(i_num!=14)return 0;

    int ia_mj[14];
    for(i=0;i<14;i++)
         ia_mj[i]=(mjpai)pmj_arr[i];

    int i_sum=0,ia_selected[14];
    for(i=0;i<14;i++)
         ia_selected[i]=0;

    for(i=0;i<14;i++){
        if(ia_selected[i])continue;
        for(j=i+1;j<14;j++){
            if(ia_selected[j]||j==i)continue;

            if(ia_mj[i]==ia_mj[j]){
                ia_selected[i]=ia_selected[j]=1;
                i_sum++;
                break;
            }
        }
        if(ia_selected[i]==0)break;
    }

    if(i_sum!=7)return 0;

    mishel(ia_mj,14);

    int i_haohua=0;
    for(i=0;i<=10;i+=2)
        if(ia_mj[i]==ia_mj[i+2])
            i_haohua++;

    int i_xiaosa=0;
    for(i=0;i<14;i+=2)
         ia_selected[i]=0;
    for(i=0;i<=8;i+=2){
        if(i_xiaosa>2)break;//最多兩個瀟灑
        if (!ia_selected[i]&&!ia_selected[i+2]&&!ia_selected[i+4])
            if(ia_mj[i+2]-ia_mj[i]==1&&ia_mj[i+4]-ia_mj[i+2]==1)
            {
                i_xiaosa++;
                ia_selected[i]=ia_selected[i+2]=ia_selected[i+4]=1;
                i=-2;
                continue;
            }
        if (!ia_selected[i]&&!ia_selected[i+2]&&!ia_selected[i+6])
            if(i+6<=12&&ia_mj[i+2]-ia_mj[i]==1&&ia_mj[i+6]-ia_mj[i+2]==1)
            {
                i_xiaosa++;
                ia_selected[i]=ia_selected[i+2]=ia_selected[i+6]=1;
                i=-2;
                continue;
            }
        if (!ia_selected[i]&&!ia_selected[i+4]&&!ia_selected[i+6])
            if(i+6<=12&&ia_mj[i+4]-ia_mj[i]==1&&ia_mj[i+6]-ia_mj[i+4]==1)
            {
                i_xiaosa++;
                ia_selected[i]=ia_selected[i+4]=ia_selected[i+6]=1;
                i=-2;
                continue;
            }
        if (!ia_selected[i]&&!ia_selected[i+4]&&!ia_selected[i+8])
            if(i+8<=12&&ia_mj[i+4]-ia_mj[i]==1&&ia_mj[i+8]-ia_mj[i+4]==1)
            {
                i_xiaosa++;
                ia_selected[i]=ia_selected[i+4]=ia_selected[i+8]=1;
                i=-2;
                continue;
            }
    }

    return 1+i_xiaosa*100+i_haohua*10;
}


static int  power(int base,int iexp)
{
    int i,result=1;
    for(i=0;i<iexp;i++)
        result*=base;
    return result;
}

int getwei(int number,int pos)
{
    assert(number<=999&&pos<=3);
    if (pos==1)
        return number%10;
    else
        return(number%power(10,pos)-number%power(10,pos-1))/power(10,pos-1);
}


bool bukao(const mjpai *pmj_arr,int i_num,const mjpai mj)
{

    int flag=false;
    for(int i=0;i<i_num;i++)
        if(comparemj(pmj_arr[i],mj)>=-2&&comparemj(pmj_arr[i],mj)<=2)
            flag=true;

    return !flag;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩二区三区四区| 亚洲国产成人私人影院tom| 亚洲一区免费视频| 在线观看一区二区精品视频| 亚洲大片精品永久免费| 777奇米四色成人影色区| 日本在线不卡视频一二三区| 欧美一个色资源| 国产精品一区二区x88av| 久久精品一区二区三区不卡| 成人高清视频在线| 亚洲精品v日韩精品| 欧美日韩免费高清一区色橹橹 | 欧美日韩午夜精品| 亚瑟在线精品视频| 精品蜜桃在线看| 成人a免费在线看| 一区二区成人在线视频| 欧美电视剧在线观看完整版| 国产69精品久久久久777| 一区二区三区蜜桃网| 欧美一级欧美三级在线观看| 国产九九视频一区二区三区| 中文字幕一区日韩精品欧美| 欧美中文字幕亚洲一区二区va在线| 天堂av在线一区| 国产欧美日韩视频在线观看| 色综合久久久久综合99| 日本人妖一区二区| 国产精品久久一卡二卡| 欧美精品乱码久久久久久| 男女视频一区二区| 国产精品久久久久三级| 91精品国产综合久久福利软件| 国产成人一区二区精品非洲| 舔着乳尖日韩一区| 一色桃子久久精品亚洲| 欧美一区二区三区在线观看视频 | 亚洲精选视频在线| 日韩欧美国产精品| 成人黄色在线看| 日韩高清在线不卡| 亚洲精品国产成人久久av盗摄| 欧美一区二区三区四区久久| 99精品视频在线播放观看| 美女任你摸久久| 一二三区精品视频| 国产精品美女一区二区| 日韩你懂的在线播放| 欧美亚洲动漫精品| 成人爱爱电影网址| 久久99这里只有精品| 亚洲综合男人的天堂| 中文字幕欧美日韩一区| 日韩午夜激情av| 欧美亚洲高清一区| 91麻豆6部合集magnet| 丁香婷婷综合色啪| 久久99精品久久久久久国产越南 | 一区二区三区波多野结衣在线观看| 欧美精品一区二区蜜臀亚洲| 欧美日韩久久久久久| 99国产精品国产精品毛片| 国产在线精品免费av| 日精品一区二区三区| 亚洲午夜免费电影| 亚洲人精品午夜| 国产精品成人午夜| 欧美国产精品一区| 国产人成一区二区三区影院| 日本一区二区不卡视频| 久久精品欧美一区二区三区不卡| 3d动漫精品啪啪一区二区竹菊| 在线视频亚洲一区| 91九色02白丝porn| 91蜜桃免费观看视频| 99久久er热在这里只有精品66| 成人av电影在线播放| 成人激情午夜影院| 99久久久无码国产精品| 99精品在线观看视频| av欧美精品.com| 91看片淫黄大片一级在线观看| 99久久免费精品高清特色大片| 色综合中文综合网| 国产精品国产成人国产三级| 久久久久97国产精华液好用吗| 日韩一级二级三级| 色综合天天视频在线观看| 日韩欧美国产三级| 欧美成人猛片aaaaaaa| 在线综合+亚洲+欧美中文字幕| 香港成人在线视频| 日韩成人dvd| 美女网站一区二区| 韩国精品主播一区二区在线观看 | 精品裸体舞一区二区三区| 日韩欧美一区二区视频| 久久久亚洲精品一区二区三区| 日韩精品一区二区三区视频播放| 欧美一级黄色片| 国产人久久人人人人爽| 亚洲精品国产a| 日本人妖一区二区| 国产精品18久久久久久久久| 99视频一区二区| 欧美亚洲高清一区| 精品福利一二区| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲精选视频在线| 日韩电影一区二区三区四区| 狠狠色狠狠色综合系列| 成人av在线电影| 欧美色图在线观看| 久久综合色天天久久综合图片| 中文字幕免费不卡| 亚洲成av人在线观看| 激情成人午夜视频| 在线一区二区三区四区五区 | 欧美日韩精品欧美日韩精品一综合| 欧美一区二区三区在线看| 国产精品视频一区二区三区不卡| 亚洲精品乱码久久久久久久久 | 免费成人在线网站| 成人网页在线观看| 欧美一区二区在线观看| 亚洲同性gay激情无套| 麻豆精品一区二区三区| 一本一道波多野结衣一区二区| 日韩欧美中文字幕公布| 亚洲免费观看在线视频| 国产精品一区二区久激情瑜伽 | 美女一区二区久久| 在线看国产一区| 久久综合久久99| 日精品一区二区三区| 色先锋资源久久综合| xfplay精品久久| 天堂av在线一区| 91浏览器在线视频| 久久精品亚洲一区二区三区浴池| 亚洲自拍另类综合| 91欧美激情一区二区三区成人| 久久女同精品一区二区| 日韩不卡一区二区三区| 欧美制服丝袜第一页| 国产精品久久久久久久久快鸭 | 国产精品系列在线| 精品一区二区精品| 91精品国产综合久久蜜臀| 伊人一区二区三区| 成av人片一区二区| 久久精品一区二区三区不卡| 日韩精品一级二级| 精品视频1区2区| 亚洲视频在线观看一区| 丁香啪啪综合成人亚洲小说| 精品理论电影在线观看| 天堂影院一区二区| 欧美精品 国产精品| 亚洲观看高清完整版在线观看| 99精品国产99久久久久久白柏| 国产精品网站在线| 成人精品小蝌蚪| 国产精品区一区二区三| 不卡av在线免费观看| 国产精品久久久久一区二区三区共| 国产激情一区二区三区| 国产校园另类小说区| 国产成人av一区二区三区在线| 久久天天做天天爱综合色| 久久91精品国产91久久小草| 日韩欧美在线影院| 秋霞国产午夜精品免费视频| 日韩欧美高清dvd碟片| 精品一区二区免费视频| 精品999在线播放| 国产麻豆9l精品三级站| 国产女主播在线一区二区| av在线一区二区三区| 亚洲男人的天堂av| 欧美日韩精品二区第二页| 天天综合色天天| 精品精品国产高清一毛片一天堂| 美国av一区二区| 国产日韩欧美高清| 99久久免费精品高清特色大片| 夜夜嗨av一区二区三区四季av | 日韩一级片网站| 极品美女销魂一区二区三区免费| www久久久久| 91在线观看成人| 性久久久久久久久| 久久欧美一区二区| 91免费在线看| 日韩精品乱码av一区二区| 2024国产精品| 色999日韩国产欧美一区二区| 日韩精品欧美精品| 中文字幕av一区二区三区高|