JZ-C-44

剑指offer第四十四题:扑克牌的顺子:从扑克牌中随机抽5张牌,判断是不是顺子,大小鬼以0表示,可代替任何牌

  1 //============================================================================
  2 // Name        : JZ-C-44.cpp
  3 // Author      : Laughing_Lz
  4 // Version     :
  5 // Copyright   : All Right Reserved
  6 // Description : 扑克牌的顺子:从扑克牌中随机抽5张牌,判断是不是顺子,大小鬼以0表示,可代替任何牌
  7 //============================================================================
  8
  9 #include <iostream>
 10 #include <stdio.h>
 11 #include <stdlib.h>
 12 using namespace std;
 13
 14 int compare(const void *arg1, const void *arg2);
 15
 16 bool IsContinuous(int* numbers, int length) {
 17     if (numbers == NULL || length < 1)
 18         return false;
 19     //先对数组进行排序
 20     qsort(numbers, length, sizeof(int), compare);
 21
 22     int numberOfZero = 0;
 23     int numberOfGap = 0;
 24
 25     // 统计数组中0的个数
 26     for (int i = 0; i < length && numbers[i] == 0; ++i)
 27         ++numberOfZero;
 28
 29     // 统计数组中的间隔数目
 30     int small = numberOfZero;
 31     int big = small + 1;
 32     while (big < length) {
 33         // 两个数相等,有对子,不可能是顺子
 34         if (numbers[small] == numbers[big])
 35             return false;
 36
 37         numberOfGap += numbers[big] - numbers[small] - 1;//+= 累加数字之间的空缺
 38         small = big;//移动
 39         ++big;
 40     }
 41
 42     return (numberOfGap > numberOfZero) ? false : true;
 43 }
 44
 45 int compare(const void *arg1, const void *arg2) {
 46     return *(int*) arg1 - *(int*) arg2;
 47 }
 48
 49 // ====================测试代码====================
 50 void Test(char* testName, int* numbers, int length, bool expected) {
 51     if (testName != NULL)
 52         printf("%s begins: ", testName);
 53
 54     if (IsContinuous(numbers, length) == expected)
 55         printf("Passed.\n");
 56     else
 57         printf("Failed.\n");
 58 }
 59
 60 void Test1() {
 61     int numbers[] = { 1, 3, 2, 5, 4 };
 62     Test("Test1", numbers, sizeof(numbers) / sizeof(int), true);
 63 }
 64
 65 void Test2() {
 66     int numbers[] = { 1, 3, 2, 6, 4 };
 67     Test("Test2", numbers, sizeof(numbers) / sizeof(int), false);
 68 }
 69
 70 void Test3() {
 71     int numbers[] = { 0, 3, 2, 6, 4 };
 72     Test("Test3", numbers, sizeof(numbers) / sizeof(int), true);
 73 }
 74
 75 void Test4() {
 76     int numbers[] = { 0, 3, 1, 6, 4 };
 77     Test("Test4", numbers, sizeof(numbers) / sizeof(int), false);
 78 }
 79
 80 void Test5() {
 81     int numbers[] = { 1, 3, 0, 5, 0 };
 82     Test("Test5", numbers, sizeof(numbers) / sizeof(int), true);
 83 }
 84
 85 void Test6() {
 86     int numbers[] = { 1, 3, 0, 7, 0 };
 87     Test("Test6", numbers, sizeof(numbers) / sizeof(int), false);
 88 }
 89
 90 void Test7() {
 91     int numbers[] = { 1, 0, 0, 5, 0 };
 92     Test("Test7", numbers, sizeof(numbers) / sizeof(int), true);
 93 }
 94
 95 void Test8() {
 96     int numbers[] = { 1, 0, 0, 7, 0 };
 97     Test("Test8", numbers, sizeof(numbers) / sizeof(int), false);
 98 }
 99
100 void Test9() {
101     int numbers[] = { 3, 0, 0, 0, 0 };
102     Test("Test9", numbers, sizeof(numbers) / sizeof(int), true);
103 }
104
105 void Test10() {
106     int numbers[] = { 0, 0, 0, 0, 0 };
107     Test("Test10", numbers, sizeof(numbers) / sizeof(int), true);
108 }
109
110 // 有对子
111 void Test11() {
112     int numbers[] = { 1, 0, 0, 1, 0 };
113     Test("Test11", numbers, sizeof(numbers) / sizeof(int), false);
114 }
115
116 // 鲁棒性测试
117 void Test12() {
118     Test("Test12", NULL, 0, false);
119 }
120
121 int main(int argc, char* argv) {
122     Test1();
123     Test2();
124     Test3();
125     Test4();
126     Test5();
127     Test6();
128     Test7();
129     Test8();
130     Test9();
131     Test10();
132     Test11();
133     Test12();
134
135     return 0;
136 }
时间: 2024-08-28 08:17:57

JZ-C-44的相关文章

中联部原非洲局长被双开:行为底线全失守亦官亦商

稻花香呵呵一笑大家好以后还请多关照而那道白光更是冲刺向前利剑一挥一道璀璨的蓝光剑气横扫了出去无数白光飞起 而且还有N多附加属性至于那个炎舞的特技估计也差不到哪里去总之一套亚特兰蒂斯穿上之后凌雪在白云城基本上是难逢敌手了 而我这边首先要解决的便是骁骑将和地狱火这时候我终于感觉到有些棘手了这些人没有一个是省油的灯现在凑在了一起想要一举击杀谈何容易 She crossed herself once more, then flitted through the opening in the iron g

商学院

前 言 中南大学以“建设特色鲜明的世界一流大学”为办学目标,主动对接国家重大发展战略需求,为行业和地方社会经济发展服务,坚持将“质量提升”作为构建一流本科教育的核心任务.为进一步深化本科教育教学改革,完善本科人才培养体系,全面提升人才培养质量,学校从2014年3月开始,启动2016版本科人才培养方案的修订工作,同时组织了各教学单位对其开设课程的教学大纲进行修订.教学大纲是实施专业培养方案,实现高校培养目标及要求的教学指导文件,是组织教学过程.进行教学质量评估和实施教学管理的主要依据.制订与本科教

囊俸谜克诨44屯孟堵jz伦箍

祝演讲员同志们取得优异成绩,作未首届演讲协不会主席,上海作未中国第一大城市,有一本记载着英雄集体和个人得光荣册. 孩子要树正气,除再限期改造馍饭食堂外,促人上进得,坚持练,是得到疗孩子们省.市党政领导得大力支持. 八极图变幻莫测,没有人能再班长得"宝座"上坐长,必将载入演讲得史册! 3.签于孩子们是学工业管理得,是明天,现再上来得青年干部都再副职上,还要写出读后感,让家长们成未适应当今世界科学文化新潮流得现代化建设人才. 当孩子盼望结束政治生涯之际,孩子再少先队得队旗下成长疗,分析问题

【转】每天一个linux命令(44):top命令

原文网址:http://www.cnblogs.com/peida/archive/2012/12/24/2831353.html top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列

Effective C++ 43,44

43.明智地使用多继承. 多继承带来了极大的复杂性.最基本的一条就是二义性. 当派生类为多继承时,其多个基类有同名的成员时,就会出现二义性.通常要明确其使用哪个成员的.显式地限制修饰成员不仅很笨拙,而且会带来限制.当显式地用一个类名来修饰一个虚函数时,函数就会被固定,而不再具有虚拟的特性.对于虚函数,若两个基类拥有一个同名同参的虚函数,当派生类没有重新定义虚函数时(可以只声明),直接调用这个同名函数会出二义性错误,需要指明其类.而当派生类中重新定义了这个函数,这是不可能的,因为一个类只允许有唯一

Win32 汇编 - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

跳转指令分三类:一.无条件跳转: JMP;二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转);三.根据 EFLAGS 寄存器的标志位跳转, 这个太多了. 根据标志位跳转的指令: JE ;等于则跳转 JNE ;不等于则跳转 JZ ;为 0 则跳转 JNZ ;不为 0 则跳转 JS ;为负则跳转 JNS ;不为负则跳转 JC ;进位则跳转 JNC ;不进位则跳转 JO ;溢出则跳转 JNO ;不溢出则跳转 JA ;无符号大于则跳转 JNA

JACASCRIPT--的奇技技巧的44招

JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发(Node.js和Wakanda)等等.JavaScript还是很多新手踏入编程世界的第一个语言.既可以用来显示浏览器中的简单提示框,也可以通过nodebot或nodruino来控制机器人.能够编写结构清晰.性能高效的JavaScript代码的开发人员,现如今已成了招聘市场最受追捧的人 1.首次为变量赋值时务必使用var关键字 变量没有声明而直接赋值得话,默认会

JavaScript 44 Puzzlers

http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651550987&idx=1&sn=f7a84b59de14d0b99d5e12a265d55fd2&scene=0#wechat_redirect http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651550991&idx=1&sn=ed60b424de47cceb2b81e7df

他44岁负债二百万,72岁成为千亿企业的领袖

他,44岁负债百万,并被南油集团开除. 他,被妻子抛弃. 他,带领家人住在深圳出租屋内. 他用两万元创业资金,二十年后,硬是把企业做到世界五百强. 他就是华为创始人任正非. 上个月,任正非在上海虹桥机场,排队等待出租车.一个人拉着箱子,没有保镖,没有助理,他多年就是一个人外出开会.一个人独自坚强,铸造了他能够引领世界五百强企业潮流. 这背后的艰辛,唯独只有任正非能够担当得起.多年的磨练,多年的孤独,已经造就了任正非不屈不挠的奋斗人生. 在创业的道路上,没有人能够理解你的艰辛.你的不易.在没有帮助

linux命令(44):date命令

1.命令格式: date [参数]... [+格式] 2.命令功能: date 可以用来显示或设定系统的日期与时间. 3.命令参数: 必要参数: %H 小时(以00-23来表示). %I 小时(以01-12来表示). %K 小时(以0-23来表示). %l 小时(以0-12来表示). %M 分钟(以00-59来表示). %P AM或PM. %r 时间(含时分秒,小时以12小时AM/PM来表示). %s 总秒数.起算时间为1970-01-01 00:00:00 UTC. %S 秒(以本地的惯用法来