44.扑克牌的顺子

把5张牌看成由5个数字组成的数组。大小王定义为0。

bool IsContinuous(int* numbers, int length)

{

if (numbers == NULL || length < 1)

return false;

qsort(numbers, length, sizeof(int), compare);

int numberOfZero = 0;

int numberOfGap = 0;

//统计数组中0的个数

for (int i = 0; i < length&&numbers[i] == 0; ++i)

++numberOfZero;

//统计数组中的间隔数目

int small = numberOfZero;

int big = small + 1;

while (big < length)

{

//两个数相等,有对子,不可能是顺子

if (numbers[small] == numbers[big])

return false;

numberOfGap += numbers[big] - numbers[small] - 1;

small = big;

++big;

}

return (numberOfGap > numberOfZero) ? false : true;

}

int compare(const void* arg1, const void* arg2)

{

return  *(int*)arg1 - *(int*)arg2;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-29 17:29:16

44.扑克牌的顺子的相关文章

剑指offer (44) 扑克牌的顺子

题目:从扑克牌中随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续的 2-10为数字本身,A为1,J为11,Q为12,K为13,大小王可以替换任意数字 题解分析: step1. 首先大小王看作0,与其他数字都区分开 step2. 对这5张牌排序 step3. 统计5张牌中0的个数和 相邻数字之间的空缺总数,因为 我们可以把0替换掉空缺所需的数 bool IsContinuous(std::vector<int>& num) { if (num.size() != 5) retur

【剑指offer】:Q44:扑克牌的顺子

def IsContinuous(seq, num = 5): zeros = 0; d = 0 seq = sorted(seq) for i in range(num - 1): if seq[i] == 0: zeros += 1 continue if seq[i] == seq[i + 1]: return False d += seq[i + 1] - seq[i] - 1 return zeros >= d [剑指offer]:Q44:扑克牌的顺子,布布扣,bubuko.com

编程算法 - 扑克牌的顺子 代码(C)

扑克牌的顺子 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 从扑克牌中随机抽取5张牌, 推断是不是一个顺子, 即这5张牌是不是连续的. 2~10为数字本身, A为1, J为11, Q为12, K为13, 而大小王能够看成随意数字. 排序, 推断字符串之间的间隔数, 假设小于等于大小王的数量, 则是连续, 否则不是. 代码: /* * main.cpp * * Created on: 2014.7.12 * Author: spike */

【编程题目】扑克牌的顺子

67.俩个闲玩娱乐(运算).1.扑克牌的顺子从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的.2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意数字. 思路: 用min.max记录输入的牌对应的数字大小,不考虑王,用wnum记录王的个数, record[13]记录每种牌是否出现过.设要判断n个牌是否连续 只要  出现不重复 且(max - min + 1) 在 [ n - wnum , n ]之间即可 /* 67.俩个闲玩娱

40.扑克牌的顺子

http://zhedahht.blog.163.com/blog/static/25411174200951262930831/ http://blog.csdn.net/wuzhekai1985/article/details/6639919 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字. 分析:这题目很有意思,是一个典型的寓教于乐的题目. 我们需要把扑克牌的背景抽象成计算机语言.

算法:扑克牌的顺子

扑克牌的顺子从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的. 2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意数字. 没找到很好的解法,贴上我的解法,看有没有更好的解法. 我用一个数组存储输入的数字,用99代表大小王,然后对其排序,当期不为99时求出其前一个与后一个的差值-1之和,即中间差了多少张牌,与王的数量对比. #include <iostream>#include <stack>using name

剑指Offer对答如流系列 - 扑克牌的顺子

面试题61:扑克牌的顺子 题目描述 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的. 2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王可以看成任意数字. 问题分析 这道题算法思想还是比较简单的. 记大小王记为0,具体步骤如下: 进行对5张牌进行排序: 找出0的个数: 算出相邻数字的空缺总数: 如果0的个数大于等于空缺总数,说明连续,反之不连续: 记得判断相邻数字是否相等,如果有出现相等,说明不是顺子. 问题解答 public boolean isConti

【剑指offer】扑克牌的顺子

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27849055 题目描写叙述: LL今天心情特别好,由于他去买了一副扑克牌,发现里面竟然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想測測自己的手气,看看能不能抽到顺子,假设抽到的话,他决定去买体育彩票,嘿嘿!."红心A,黑桃3,小王,大王,方片5","Oh My God!"不是顺子.....LL不高兴了,他想了想,决定大\小

扑克牌的顺子

题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这五张牌是不是连续的.2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以为任意数字. 我们需要把扑克牌的背景抽象成计算机语言.不难想象,我们可以把5张牌看成由5个数字组成的数组.大小王是特殊的数字,我们不妨把他们都定义为0,这样就能和其他牌区分开来了. 接下来我们分析怎样判断5个数字是不是连续的,最直观的方法是把数组排序.值得注意的是,由于0可以当成任意数字,我们可以用0去补满数组中的空缺.如果排序之后的数组是不连续的,即相