【1】题目
题目:从扑克牌中随机抽 5张牌,判断是不是一个顺子,即这 5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。
【2】思路
首先把数组排序,再统计数组中0的个数,最后统计排序之后的数组中相邻数字之间的空缺总数。如果空缺的总数小于或者等于0的个数,那么这个数组就是连续的;反之则不连续。
最后,我们还需要注意一点:如果数组中的非 0 数字重复出现,则该数组不是连续的。换成扑克牌的描述方式就是如果一副牌里含有对子,则不可能是顺子。
【3】代码
#include "pch.h"
#include <iostream>
int compare(const void *number1, const void *number2)
{
return *(int*)number1 - *(int*)number2;
}
bool IsContinuous(int *number, int length)
{
if (number==nullptr||length<1)
{
return false;
}
qsort(number, length, sizeof(int), compare);
int numberofzero = 0;
int numberofgap = 0;
for (int 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 (numberofgap > numberofzero) ? false : true;
}
int main()
{
//PrintProbability(2);
int number[] = { 1,2,2,3,4,6,0 };
int length = 6;
bool flag = IsContinuous(number, length);
printf_s("预测结果为:%d", flag);
}