zoukankan      html  css  js  c++  java
  • 麻将算法

    麻将胡牌算法(不带赖子)(2天)

    编码:(假设一副牌只有筒子 1表示1筒   2表示2筒。。。。 9表示9筒)

    要求:

    1)七对算法(判断14张牌是否是7对)

    2)碰碰胡算法(判断14张牌是否是碰碰胡)

    3)屁胡算法(判断14张牌是否是屁胡)

    用户输入14张牌值,要求判断出这14张牌是否满足上述3种牌型(可能同时满足上述3种牌型)

         解答:  单纯的模拟题 简单的搜索(0(2^log2(n)))

      1 #define Local
      2 #include<stdio.h>
      3 #include<stdlib.h>
      4 #include<string.h>
      5 #include<time.h>
      6 
      7 
      8 int arg [14]= {0};
      9 
     10 
     11 int cmp(const void * arg ,const  void *brg){
     12 
     13   int * ar = (int *)arg;
     14   int * br = (int *)brg;
     15   return *ar - *br ;
     16 }
     17 
     18 //初始化
     19 void init( int A[] ){
     20  int i;
     21  srand( time(NULL) );
     22  for(i=0 ; i<14 ; i++)
     23     i[arg] = rand();
     24 }
     25 
     26 //七对胡牌
     27 bool  AlgSevenHu(int tmp[]){
     28      int i;
     29     for(i=1 ; i<10 ;i++)
     30       if(tmp[i]&1) return false ;     //不是七对
     31       return true;
     32 }
     33 
     34 //碰碰胡
     35 bool  AlgPengpHu(int tmp[]){
     36 
     37    int i=0 , cnt=0;
     38    //判断门将
     39     for( i=1 ; i<10 ; i++ ){
     40 
     41         if(tmp[i]==0||tmp[i]==3);
     42         else  if(tmp[i]==2)  cnt++;
     43         else return false ;
     44     }
     45       if(cnt==1)
     46          return true;
     47    return true;
     48 }
     49 
     50 //平胡
     51 bool AlgPinghHu(int tmp [] , int len){
     52 
     53   //qsort(A , 14 ,sizeof(A[0]) , cmp);   //升序
     54   //return dfs(A, 14);
     55    bool tag = false;
     56    int i;
     57      for(i=1 ; i<10 ; i++){
     58 
     59            if(tmp[i]>2){
     60               tmp[i]-=3;     //AAA组合
     61               len-=3;
     62              tag = AlgPinghHu(tmp , len);
     63               tmp[i]+=3;
     64               len+=3;
     65               if(tag) return true;
     66               //或者这样的组合
     67               if(tmp[i+1]>0&&tmp[i+2]>0){
     68                        tmp[i]--;
     69                        tmp[i+1]--;
     70                        tmp[i+2]--;
     71                        len-=3;
     72                 tag =  AlgPinghHu(tmp , len);
     73                        tmp[i]++;
     74                        tmp[i+1]++;
     75                        tmp[i+2]++;
     76                        len+=3;
     77                 if(tag) return true;
     78                 }
     79           }
     80          if(tmp[i]>0){
     81                 //ABC组合
     82                 if(len>2&&tmp[i+1]>0&&tmp[i+2]>0){
     83                        tmp[i]--;
     84                        tmp[i+1]--;
     85                        tmp[i+2]--;
     86                        len-=3;
     87                     tag= AlgPinghHu(tmp , len);
     88                        tmp[i]++;
     89                        tmp[i+1]++;
     90                        tmp[i+2]++;
     91                        len+=3;
     92                   if(tag) return true;
     93                 }
     94 
     95           if(len==2){
     96              if(tmp[i]==2)
     97                 return true ;
     98               return false;
     99              }
    100           }
    101    }
    102    return false ;
    103 }
    104 
    105 void print(int A[]){
    106    int i=0;
    107     for(i=0 ; i<13 ;i++ )
    108         printf("%d ",A[i]);
    109     printf("%d
    ",A[13]);
    110 }
    111 int main(int argv  , char * args [] ){
    112 
    113   char hopg[2];
    114  //init(arg);
    115    bool pi=0 ,pe=0 ,qi=0;
    116    int i=0,tmp[10]={0};
    117 #ifdef Local
    118   freopen("data.in","r",stdin);
    119 #endif // Local
    120 
    121  while(1){
    122 
    123    printf("输入14张牌号:
    ");
    124    for( i=0;i<14 ;i++)
    125       scanf("%d",arg+i);
    126       print(arg);
    127     memset(tmp , 0, sizeof(tmp));
    128 
    129    for( i=0;i<14;i++)  tmp[arg[i]]++;
    130       pi =AlgPinghHu(tmp ,14);
    131       pe =AlgPengpHu(tmp);
    132       qi = AlgSevenHu(tmp);
    133 
    134     if(pi)
    135       printf("祝贺 ,屁胡!
    ");
    136     if(pe)
    137          printf("祝贺 , 碰碰胡!
    ");
    138     if(qi)
    139         printf("祝贺,七对胡
    ");
    140     if(!pi&&!pe&&!qi)
    141         printf("未能胡牌!
    ");
    142 
    143      puts("继续游戏 y/n ?");
    144      scanf("%s",hopg);
    145 
    146     if(hopg[0]=='n'||hopg[0]=='N')
    147         break;
    148  }
    149   return 0;
    150 }

     

  • 相关阅读:
    【蓝牙音箱】小米小爱蓝牙音箱
    table表格 td设置固定宽度
    VMware ESXi 客户端连接控制台时,提示“VMRC 控制台连接已断开...正在尝试重新连接”的解决方法
    redis-bitmap 命令使用的一些帖子
    TCP11种状态
    nginx--cookies转发
    MQTT协议介绍
    常用链路追踪工具
    常用字符串处理命令
    spring maven repository
  • 原文地址:https://www.cnblogs.com/gongxijun/p/4689285.html
Copyright © 2011-2022 走看看