zoukankan      html  css  js  c++  java
  • 每天一道算法题(22)——扑克牌的顺子

    题目:

             从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。


    思路:

          设定王为0。统计非王的牌之间的空格数,若小于王的总数(对应填补),则为顺子。有任意一张牌大于2,为非顺子。


    代码:

        

    bool process(const char* str=NULL){
    	 if(!str||strlen(str)<5)
    		 return false;
    
    	 int* data=new int[14];
    	 memset(data,0,14*sizeof(int));//使用之前一定初始化
    	 while(*str!='')
                data[*str++ - '0']++;//统计牌数
    
    	 int counter=0;//非王的牌的总数
    	 int blank=0;//牌之间的空格数
    	 bool flag=false;
    	 for(int i=1;i<14&&(counter<=5-data[0]);i++){
    		 if(data[i]==1){//出现一张
    			 counter++;
    			 flag=true;
    		 }
    		 else if(data[i]>1){//对子以及以上
    			 delete []data;
    			 return false;
    		 }
    		 else if(flag)//牌之间空格数
    			 blank++;
              }
    
             int king=data[0];
             delete []data;
    
             if(blank<=king)//比较空格和king的张数
    	    return true;
             else
                return false;
    }   









  • 相关阅读:
    exit()和_exit()函数(转)
    C语言struct内存占用问题 (转)
    C语言中memset函数(转)
    STDIN_FILENO与stdin区别(转)
    stderr,strerror,errno,perror,论坛大神的回答!
    C++ 函数模版
    C++ 内置函数
    offsetof
    LockSupportDemo
    读写锁,await和signa
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5393010.html
Copyright © 2011-2022 走看看