每天一道演算法題(22)——撲克牌的順子
阿新 • • 發佈:2019-02-08
題目:
從撲克牌中隨機抽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!='\0') 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; }