// 面试题61:扑克牌的顺子
// 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。
// 2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。 #include <iostream> int Compare(const void *arg1, const void *arg2); bool IsContinuous(int* numbers, int length)
{
if (numbers == nullptr || length < )//边界判断
return false; qsort(numbers, length, sizeof(int), Compare);//使用qsort排序,虽然qsort算法复杂度O(nlongn),但是n不大,和O(n)差不多 int numberOfZero = ;
int numberOfGap = ; // 统计数组中0的个数
for (int i = ; i < length && numbers[i] == ; ++i)
++numberOfZero; // 统计数组中的间隔数目
int small = numberOfZero;
int big = small + ;
while (big < length)
{
// 两个数相等,有对子,不可能是顺子
if (numbers[small] == numbers[big])
return false; numberOfGap += numbers[big] - numbers[small] - ;
small = big;
++big;
} return (numberOfGap > numberOfZero) ? false : true;
} int Compare(const void *arg1, const void *arg2)//充当qsort谓词
{
return *(int*)arg1 - *(int*)arg2;
} // ====================测试代码====================
void Test(const char* testName, int* numbers, int length, bool expected)
{
if (testName != nullptr)
printf("%s begins: ", testName); if (IsContinuous(numbers, length) == expected)
printf("Passed.\n");
else
printf("Failed.\n");
} void Test1()
{
int numbers[] = { , , , , };
Test("Test1", numbers, sizeof(numbers) / sizeof(int), true);
} void Test2()
{
int numbers[] = { , , , , };
Test("Test2", numbers, sizeof(numbers) / sizeof(int), false);
} void Test3()
{
int numbers[] = { , , , , };
Test("Test3", numbers, sizeof(numbers) / sizeof(int), true);
} void Test4()
{
int numbers[] = { , , , , };
Test("Test4", numbers, sizeof(numbers) / sizeof(int), false);
} void Test5()
{
int numbers[] = { , , , , };
Test("Test5", numbers, sizeof(numbers) / sizeof(int), true);
} void Test6()
{
int numbers[] = { , , , , };
Test("Test6", numbers, sizeof(numbers) / sizeof(int), false);
} void Test7()
{
int numbers[] = { , , , , };
Test("Test7", numbers, sizeof(numbers) / sizeof(int), true);
} void Test8()
{
int numbers[] = { , , , , };
Test("Test8", numbers, sizeof(numbers) / sizeof(int), false);
} void Test9()
{
int numbers[] = { , , , , };
Test("Test9", numbers, sizeof(numbers) / sizeof(int), true);
} void Test10()
{
int numbers[] = { , , , , };
Test("Test10", numbers, sizeof(numbers) / sizeof(int), true);
} // 有对子
void Test11()
{
int numbers[] = { , , , , };
Test("Test11", numbers, sizeof(numbers) / sizeof(int), false);
} // 鲁棒性测试
void Test12()
{
Test("Test12", nullptr, , false);
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
Test7();
Test8();
Test9();
Test10();
Test11();
Test12();
system("pause");
return ;
}

《剑指offer》第六十一题(扑克牌的顺子)的更多相关文章

  1. 《剑指offer》第二十一题(调整数组顺序使奇数位于偶数前面)

    // 面试题21:调整数组顺序使奇数位于偶数前面 // 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 // 奇数位于数组的前半部分,所有偶数位于数组的后半部分. #inclu ...

  2. 《剑指offer》第十一题(旋转数组的最小数字)

    // 面试题:旋转数组的最小数字 // 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. // 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组 // {3, ...

  3. 剑指offer第六章

    剑指offer第六章 1.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,所以输出4 分析:思路1 ...

  4. 剑指Offer(二十一):栈的压入、弹出序列

    剑指Offer(二十一):栈的压入.弹出序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...

  5. 剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数)

    剑指Offer(三十一):整数中1出现的次数(从1到n整数中1出现的次数) 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https:// ...

  6. [持久更新] 剑指offer题目Python做题记录

    第一题 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:先快速定位到 ...

  7. 【剑指Offer】俯视50题之21 - 30题

    面试题21包括min函数的栈  面试题22栈的压入.弹出序列  面试题23从上往下打印二叉树  面试题24二叉搜索树的后序遍历序列  面试题25二叉树中和为某一值的路径  面试题26复杂链表的复制  ...

  8. 《剑指offer》第十三题(机器人的运动范围)

    // 面试题:机器人的运动范围 // 题目:地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动,它 // 每一次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和 // ...

  9. 剑指offer四十五之扑克牌顺子(序列是否连续)

    一.题目 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...

  10. 算法学习之剑指offer(六)

    题目1 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. import java.util.*; public cl ...

随机推荐

  1. no matching editors or conversion strategy found

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionM ...

  2. linux下SVN忽略指定文件/文件夹

    http://www.cnblogs.com/fjping0606/p/4743009.html 1.配置SVN默认编辑器vi ~/.bash_profile最后一行加上:export SVN_EDI ...

  3. MySQL修改库名的方法

    先创建新的库,再用RENAME TABLE 语句移动旧库中的表到新库,最后删除旧库. (root@localhost) [(none)] create database mydb_2; Query O ...

  4. Python3 根据m3u8下载视频,批量下载ts文件并且合并

    Python3 根据m3u8下载视频,批量下载ts文件并且合并 m3u8是苹果公司推出一种视频播放标准,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少 ...

  5. Windows Media Player添加播放插件

  6. 【Python046--魔法方法:描述符】

    一.描述符的定义: 描述符就是将特殊类型的类的实例指派给另外一个类的属性 1.举例: 特殊类型的类要实现以下三个方法中的其中一个或者全部实现 * __get__(self,instance,owner ...

  7. jsoup对 HTML 文档的解析和操作

    本文手动转载自http://www.cnblogs.com/chenying99/archive/2013/01/04/2844615.html,仅根据个人需要对实用部分进行转载,详细请阅读原文. j ...

  8. Selenium Java Selection的使用

    用于向具有drop-down的选择框中输入内容 new Select(new ChromeDriver().findElement(By.cssSelector(" ..."))) ...

  9. P3041 [USACO12JAN]视频游戏的连击Video Game Combos

    思路 简单的AC自动机上dp,暴力跳fail向子节点直接转移即可 代码 #include <cstdio> #include <algorithm> #include < ...

  10. Unity3D学习笔记(二十七):MVC框架下的背包系统(2)

    Tools FileTools using System.Collections; using System.Collections.Generic; using UnityEngine; using ...