文章目录

//从扑克牌中抽出五张,判断是不是顺子,A用1表示;JQK用11,12,13表示;大小王看成任意数字
//首先排序数组,然后统计0的个数和数组中间隔数,如果0的个数>=间隔,返回true。
//还有需要注意,如果数组中有两个数字相同,那么不可能是顺子了。

#include <iostream>
#include<algorithm>
using namespace std;

int compare(const void *arg1,const void *arg2){
    return *(int*)arg1-*(int*)arg2;
}
bool IsContinuous(int *data,int length){
    if(data==NULL ||length<1)
        return false;

    qsort(data,length,sizeof(int),compare);//排序

    int numberOfZero=0;//0的个数,间隔的数目
    int numberOfGap=0;

    //统计0的个数
    for(int i=0;i<length;i++){
        if(data[i]==0)
            numberOfZero++;
    }
    //统计间隔数目
    int small=numberOfZero;//必须从这个开始,因为0不能算在这个里面,代表的是任意
    int big=small+1;
    while(big<length){
        //两个数相等,对子不可能是顺子
        if(data[small]==data[big])
            return false;
        numberOfGap+=data[big]-data[small]-1;//比如 1  3   4  5
        small=big;//两个指针,依次往后挪
        big++;
    }
    return (numberOfGap<=numberOfZero)?true:false;

}
int main()
{
    int data[]={2,4,5,6,0};
    cout<<IsContinuous(data,5);
    return 0;
}
文章目录