算法:扑克牌的顺子

扑克牌的顺子
从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的。

2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意数字。

没找到很好的解法,贴上我的解法,看有没有更好的解法。

我用一个数组存储输入的数字,用99代表大小王,然后对其排序,当期不为99时求出其前一个与后一个的差值-1之和,即中间差了多少张牌,与王的数量对比。

#include <iostream>
#include <stack>
using namespace std;
void sortarray(int a[],int length)//冒泡排序对数组进行排序
{
for(int i=0;i<length;i++)
{

{
for(int j=i;j<length;j++)
{
if(a[i]>a[j])

{
int temp=a[i];
a[i]=a[j];
a[j]=temp;

}
}
}
}
for(int i=0;i<length;i++)
{
cout<<a[i];
}
}
bool isContinue()//判断是否连续
{
int *a = new int[5];
int num,count=0,num99=0;//count为差多少张牌,num99为王的数量。
for(int i=0;i<5;i++)
{
cin>>num;
a[i]=num;
}
sortarray(a,5);
for(int i=1;i<5;i++)
{
if(a[i]==99)
num99++;
else
{
count=count+a[i]-a[i-1]-1;
}
}
if(count<=num99)//如果差牌的数量小于等于王的数量  连续,否则不连续
return true;
else return false;
}
int main( int argc, char ** argv )
{
bool ret=isContinue();
cout<<ret;
return 0;
}

时间: 2024-10-10 01:22:04

算法:扑克牌的顺子的相关文章

编程算法 - 扑克牌的顺子 代码(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 */

经典算法——扑克牌的顺子

题目描写叙述 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&

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

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

【剑指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

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

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,而大小王可以看成任意数字. 分析:这题目很有意思,是一个典型的寓教于乐的题目. 我们需要把扑克牌的背景抽象成计算机语言.

剑指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】扑克牌的顺子

转载请注明出处: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去补满数组中的空缺.如果排序之后的数组是不连续的,即相