题目:
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。A看做1,J为11,Q为12,K为13.
大小王可以看做任何数,但在输入中用0来表示。
解法:
1、统计5张牌中0的个数count。
2、统计5张牌中除0以外最小的数min 到min+4之间中出现0次的数字的个数gap。
3、比较0个个数count和 gap 数量。
代码如下:
下面代码 没有顺子的判断,因为存在顺子,那么count 和gap 一定不相等。
bool IsContinuous( vector<int> numbers ) {
if(numbers.size()!=5||numbers.empty())
return false;
int count[14]={0};
int zero,min;
int gap=0;
for(int i =0;i<5;i++)
{
if(numbers[i]<0||numbers[i]>13) //异常输入,增加鲁棒性。
return false;
count[numbers[i]]++;
}
zero = count[0];
for(int i =1;i<14;i++)
{
if(count[i]==1)
{
min = i;
break;
}
}
for(int i =min;i<min+5;i++)
{
if(count[i]==0)
gap++;
}
return gap==zero?true:false;
}