标签: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;
}
标签:n张牌判断是否是顺子
原文地址:http://blog.csdn.net/buyingfei8888/article/details/38513225