// 面试题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. shell 中的小技巧

    去掉最后一个字符 sed 's/.$//' awk '{sub(/.$/,"")}1' awk '{printf $0"\b \n"}' [root@ ~]# ...

  2. Bootstrap表单样式

    <form class="form-horizontal" role="form"> <fieldset> <legend> ...

  3. VMware Workstation Pro14安装

    1. 下载VMware Workstation Pro14,注意,这个链接支持win7 64及以上系统 2.  点击进入安装 3. 接受许可协议 4. 选择安装目录,是否选择增强型键盘驱动程序 5. ...

  4. Differences Between Enterprise, Standard and Standard One Editions on Oracle 11.2 (Doc ID 1084132.1)

    标准版不允许并行.分区.闪回.各种缓存等大数据量必须特性,如此限制,oracle摆明了只卖企业版,买标准版不如mysql(如果不熟悉postgresql的话). Oracle企业版1 CPU 20w起 ...

  5. android学习:apiDemos导入时R.java无法生成的问题

    准备导入apiDemos研究一下别人的代码,发现导入后不能正常build,无法生成R.java,发现res/layout/progressbar_2.xml里有几个 <ProgressBar a ...

  6. 模拟实现ATM+购物商城程序

    流程图: 需求: ATM:模拟实现一个ATM + 购物商城程序额度 15000或自定义实现购物商城,买东西加入 购物车,调用信用卡接口结账可以提现,手续费5%支持多账户登录支持账户间转账记录每月日常消 ...

  7. 上传代码到github的步骤

    在你的电脑上装好git 大致流程是: 1.在github上创建项目 2.使用git clone https://github.com/xxxxxxx/xxxxx.git克隆到本地 3.编辑项目 4.g ...

  8. topcoder srm 465 div1

    problem1 link 以两个点$p,q$为中心的两个正方形的边长和最大为$2dist(p,q)$,即$p,q$距离的两倍. 也就是两个$p,q$的连线垂直穿过两个正方形的一对边且平分两个正方形. ...

  9. SVM学习笔记2-拉格朗日对偶

    下面我们抛开1中的问题.介绍拉格朗日对偶.这一篇中的东西都是一些结论,没有证明. 假设我们有这样的问题:$min_{w}$ $f(w)$,使得满足:(1)$g_{i}(w)\leq 0,1\leq i ...

  10. Array数组集合的排序

    /* ######### ############ ############# ## ########### ### ###### ##### ### ####### #### ### ####### ...