//从扑克牌中随机抽取五张牌,判断是不是顺子。2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。
//思路:把5张牌看成由5个数字组成的数字数组。大小王比较特殊,先定义为零,其它牌就对应为本来的数字。
//我们先对数组排序,由于O可以看成任意的数字,所以可以先统计数组中零的个数,在统计出数组中空格的个数,然后再比较。
#include<iostream>
#include <stdlib.h>//标准库头文件
using namespace std;
#define N 5
int compare(const void* arg1,const void *arg2)
{
return *(int*)arg1 - *(int*)arg2;
}
bool IsContinuous(int *number, int length)
{
if(number == NULL || length <1)
return false;
qsort(number, length,sizeof(int),compare);//C的库函数:排序
int numberOfZero = 0;
int numberOfBlank = 0;
//统计数组中0的个数
for(int i =0;i<length && number[i]==0;++i)
++numberOfZero;
//统计数组中空格的个数
int small = numberOfZero;
int big = small + 1;
while(big < length)
{
//如果牌中出现了对子,那么一定不是顺子
if(number[big] == number[small])
return false;
numberOfBlank += number[big]-number[small]-1;
small = big;
++big;
}
return (numberOfBlank > numberOfZero)? false:true;
}
void main()
{
int numbers[N] = {1, 3, 3, 5, 4};
IsContinuous(numbers, N);
}
扑克牌的顺子
最新推荐文章于 2022-02-24 21:53:50 发布