【剑指offer】扑克牌的顺子
转载请注明出处:http://blog.csdn.net/ns_code/article/details/27849055
- 题目描写叙述:
-
LL今天心情特别好,由于他去买了一副扑克牌,发现里面竟然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想測測自己的手气,看看能不能抽到顺子,假设抽到的话,他决定去买体育彩票,嘿嘿!
。“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王能够看成不论什么数字,并且A看作1,J为11,Q为12,K为13。
上面的5张牌就能够变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。
如今,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气怎样。
为了方便起见,你能够觉得大小王是0。
- 输入:
-
输入有多组数据。
每组数据包括两行,第一行输入一个正数n(0<=n<=14),表示从扑克牌中抽出的扑克牌数。接下来的一行输入n个数,表示从这幅扑克牌中抽出的牌。
假设n=0,则结束输入。
- 输出:
-
相应每组数据,假设抽出的牌是顺子,则输出“So Lucky!”。
否则,输出“Oh My God!”。
- 例子输入:
-
5
3 5 1 0 4
5
3 5 4 7 6
5
3 5 7 4 8
0
- 例子输出:
-
So Lucky!
So Lucky!
Oh My God!
九度上把这道题目改成了一副扑克牌有4张大小王。这里姑且无论它最多几个0,就题目来说。不严谨,非常含糊。比方这里没有对顺子给出比較严谨的定义。5个下面的连续数字算是顺子吗?现实中要至少5个才算顺子的,并且假设假设3个牌也算顺子,那假设输入的是3个0呢。这有点太牵强了!看论坛里面好多人吐槽。
总之,无论那么多,这道题目无论它怎么坑爹,用剑指offer上的思路写的代码AC是没问题的,由于这里无论你0有多少个(仅仅要不大于数组的长度就可)都OK。
我之前想避开排序,或者开辟哈希数组,就遍历一遍求出最大值,最小值,0出现的次数,而后依据三者间的关系来推断是否构成顺子,但这要在数组中没有反复元素的前提下。而要推断数组中没有反复元素,要么要排序。要么就要借助哈希数组统计元素出现的次数,终于还是省不掉。
无奈最后还是用书上的思路,为求代码的简洁性。一样用C语言自带的高速排序函数,当然用计数排序(事实上跟开辟哈希数组就是一个思路)更快点,但对n最大为14的情况。二者效率差不了太多。
AC代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h> int mycompare(const void *data1,const void *data2)
{
return *(int *)data1 - *(int *)data2;
} bool IsContinuous(int *arr,int len)
{
if(arr==NULL || len<1)
return false; qsort(arr,len,sizeof(int),mycompare); int NumOf0 = 0; //0的个数
int NumOfGap = 0; //空缺的个数
int i;
for(i=0;i<len-1;i++)
{
if(arr[i] == 0)
NumOf0++;
else
{
if(arr[i] == arr[i+1])
return false;
else
NumOfGap += arr[i+1]-arr[i]-1;
}
}
return (NumOfGap>NumOf0)?false:true;
} int main()
{
int n;
int arr[15];
memset(arr,0,sizeof(arr));
while(scanf("%d",&n)!=EOF && n!=0)
{
int i;
for(i=0;i<n;i++)
scanf("%d",arr+i); bool can = IsContinuous(arr,n);
if(can)
printf("So Lucky!\n");
else
printf("Oh My God!\n");
}
return 0;
}
/************************************************************** Problem: 1355 User: mmc_maodun Language: C Result: Accepted Time:0 ms Memory:912 kb****************************************************************/
【剑指offer】扑克牌的顺子的更多相关文章
- 剑指offer——扑克牌的顺子
思想: 1.先将输入的几个数进行排序,sort函数是#include<algorithm>下的. 2.统计0的个数,以及相邻数的差值,比较0的个数及差值的和.看是否可以用大王填充中间的差值 ...
- 剑指Offer——扑克牌顺子
题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...
- 剑指Offer44 扑克牌的顺子
/************************************************************************* > File Name: 44_Contin ...
- 【Java】 剑指offer(61) 扑克牌的顺子
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连 ...
- 剑指Offer - 九度1355 - 扑克牌顺子
剑指Offer - 九度1355 - 扑克牌顺子2014-01-30 23:19 题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^). ...
- Go语言实现:【剑指offer】扑克牌顺子
该题目来源于牛客网<剑指offer>专题. LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)-他随机从中抽出了5张牌,想测测自己的手气 ...
- 【剑指Offer面试编程题】题目1355:扑克牌顺子--九度OJ
题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...
- 剑指 Offer 61. 扑克牌中的顺子 + 简单题 + 思维
剑指 Offer 61. 扑克牌中的顺子 Offer_61 题目描述 java代码 package com.walegarrett.offer; /** * @Author WaleGarrett * ...
- 剑指 Offer 61. 扑克牌中的顺子
剑指 Offer 61. 扑克牌中的顺子 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王为 0 ,可以看成任意 ...
随机推荐
- 外键删除(T-SQL Drop Foreign Key)
列出某张表相关的 FK Name select distinct name from sys.objects where object_id in ( select fk.constraint_o ...
- ubuntu 14.04搭建PHP项目基本流程
首先准备需要安装东西的列表1.apache服务器,2.php,3.mysql,4.几个软件包的链接包,安装方式是以apt-get方式安装; 1.安装apache服务器: apt-get install ...
- 【5】namenode启动过程
1.格式化空间(第一次启动的操作): 命令:bin/hadoop -format //用于格式化HDFS,如果不是首次格式化,需要删除下面配置的tmp目录后再进行core-site.xml的配置: / ...
- Owin中间件动手玩
摘要:本文目的是了解Owin基本原理.讲述如何从控制台创建一个自宿主的OwinHost,然后再编写一两个中间件 准备工作 首先通过VisualStudio创建一个控制台应用 然后添加Owin的Nuge ...
- VS2015如何连接mySQL数据库图文
1.新建一个工程名叫mysql,编程环境选择c#,然后选择windows窗体应用程序,新建一个窗体用于显示查询到sql数据库的数据集 2.从工具箱向form1窗体上拖一个按钮和datagridview ...
- Python中的三种数据结构
Python中,有3种内建的数据结构:列表.元组和字典.1.列表 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目.列表中的项目.列表中的项目应该包括在方括号中,这 ...
- Json字符串解析原理、超大json对象的解析
概述 附上完整的代码:https://pan.baidu.com/s/1dEDmGz3(入口类是Json)JSON:JavaScript 对象表示法(JavaScript Object Notatio ...
- 用Python写一款属于自己的 简易zip压缩软件 附完成图(适合初学者)
一.软件描述 用Python tkinter模块写一款属于自己的压缩软件.zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile来操作zip文件,具有功能:zip压缩功能,zip ...
- HTML5开发在2017年发展趋势如何?
随着移动互联网行业的飞速发展,人们借助于网络相互传达获取的信息越来越广泛,互联网前端开发中HTML5是最受关注的热点,HTML5让开发者和用户重新的对网页有了新的认识,从浏览器到APP都在受h5带来的 ...
- Function Programming - First Class(一等公民function)
引用外界一等公民的定义:"在JavaScript世界中函数却是一等公民,它不仅拥有一切传统函数的使用方式(声明和调用),而且可以做到像简单值一样赋值.传参.返回,这样的函数也称之为第一级函数 ...