首页 > 代码库 > n张牌判断是否是顺子
n张牌判断是否是顺子
将大小王看成0
排序 然后求出0的个数 如果0的个数大于差值且不为对子就返回true
#include<iostream> //n张牌判断是否是顺子 using namespace std; int partition(int *number,int start,int end){ int temp = number[start]; while(start < end){ while(start < end && number[end] > temp) end --; if(start < end ) number[start++] = number[end]; while(start < end && number[start] < temp) start ++; if(start < end) number[end -- ] = number[start]; number[start] = temp; } return end ; } void qsort(int *number,int start,int end){ if(start < end ){ int mid = partition(number,start,end); qsort(number,start,mid-1); qsort(number,mid+1,end); } } bool isContinuous(int *number,int length){ if(NULL == number || length < 1) return false ; qsort(number,0,length-1); int numberOfZero = 0; int numberOfGap = 0; int i = 0; //统计0的个数 for(i=0;i<length && number[i] == 0;i++){ numberOfZero ++; } int small = numberOfZero; int big = small + 1; while(big < length){ //出现对子 if(number[small] == number[big]) return false; numberOfGap += number[big] - number[small] - 1; small = big ; ++big; } return numberOfZero >= numberOfGap ? true : false; } int main() { int data[]={6,1,2,3,4,8,0}; cout<<"对原数组进行排序:"; qsort(data,0, sizeof(data) / sizeof(int) -1); for(int i =0;i<sizeof(data) / sizeof(int);i++ ){ cout << data[i]<<" "; } cout<<endl; cout<<"数组是否是顺子 "<< isContinuous(data,sizeof(data)/sizeof(int))<<endl; return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。