顺子

剑指Offer45:扑克牌顺子(java)

被刻印的时光 ゝ 提交于 2020-02-03 20:10:28
参考牛客“牛客844847号”的解答: https://www.nowcoder.com/questionTerminal/762836f4d43d43ca9deb273b3de8e1f4?f=discussion 原理分析: 扑克牌是否是顺子判断条件: 最大值-最小值<5; 没有重复的牌(除了0); 判断有无重复的牌:新建一个长度为14的整数数组sum,遍历numbers时把numbers元素(牌面值)作为sum的坐标,记录牌面值的出现次数。 题目描述 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的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。 Java代码: public class Solution {

《剑指offer》扑克牌顺子(Java)

南笙酒味 提交于 2020-01-30 07:07:36
题目描述 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的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。 做题思路 不得不说,牛客的题目描述写的真多…简单来说,题目就是这个样子的: 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,大小王可以看做任意数字。为了方便,大小王均以0来表示,并且假设这副牌中大小王均有两张。 我一开始没怎么好好读题,还想了如果给了五张牌以上的情况以及忽略了大小王无敌的情况… 首先是顺子嘛,肯定牌依次从小到大,况且大小王当0看,先排序,数值为0的先不管。找到下标不为零的index,然后开始检查看看有没有出现相邻的牌一样的情况

斗地主中是否出顺子的逻辑分析

拜拜、爱过 提交于 2020-01-13 05:11:12
A KK QQ J 10 10 9 9 8 8 7 7 5 5 4 14张牌,里面2张单牌(J,A),移除5张顺子(10 J Q K A)后剩余9张,这9张牌里又有三张单牌(10 Q K), 如果移除顺子后的单牌数目小于原有的单牌数,则出顺子,否则,移除出顺子这个操作不划算 来源: CSDN 作者: 延卿 链接: https://blog.csdn.net/fanhenghui/article/details/103753342

斗地主中自主出牌的游戏逻辑

只谈情不闲聊 提交于 2019-12-24 11:06:34
判断所有手牌的是否是某个已知类型,如果是的话直接出 找出可能包含顺子的所有牌 如果找出的包含顺子的牌不为空 从上面找出的牌中去掉炸弹 从上面找出的牌中去掉三张 如果去掉顺子和三张之后顺子还存在,则出顺子 查找手牌中的所有炸弹 删除所有炸弹 查找手牌中的所有飞机 删除所有飞机 查找手牌中的所有三张 删除所有三张 查找手牌中的所有连对 删除所有连对 如果有飞机 看看是否有飞机的连队翅膀 如果找到了连对翅膀 直接出飞机加连队翅膀 看看是否有顺子 如果找到顺子 出飞机加顺子 只出飞机 如果有三张 如果三张的牌小于A 如果有最小的单牌或对牌 最小的单或对配合三张出 只出三张 如果有连对 优先出最长的连队 如果下家和自己角色不同并且下家只剩一张牌 优先选择一张最大的牌出 优先选择一张最小的牌出 来源: CSDN 作者: 延卿 链接: https://blog.csdn.net/fanhenghui/article/details/103661185

扑克牌顺子

随声附和 提交于 2019-12-22 23:26:41
问题描述: 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的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。 解法一:排序法 #include < iostream > #include < vector > using namespace std ; class Solution { public : bool IsContinuous ( vector < int > numbers ) { if ( numbers . empty ( ) ) { return false ; } //先排序,此处使用的是选择排序 int minIndex ; for ( int i = 0 ; i < numbers . size (

扑克牌中的顺子

匆匆过客 提交于 2019-12-12 23:18:26
题目描述 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的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。 class Solution { public: bool IsContinuous( vector<int> numbers ) { if (numbers.size()==0) return false; int numberofzero = 0; int numberofgap = 0; sort(numbers.begin(),numbers.end(),compare); for (int i=0; i<numbers.size()&&numbers[i]==0;i++) numberofzero+

麻将胡牌算法

匆匆过客 提交于 2019-12-11 10:34:22
麻将胡牌算法 1、麻将的基本规则 2、胡牌算法解析 1、麻将的基本规则 常见的麻将一共有三种花色,条、筒、万。每种花色的牌都有1~9个数值,每种数值的牌有4张,总共有4 9 3=108张牌。胡牌时手牌必须满足(不包含特殊牌型,如对对胡,大对子等)3 ABC+3 DDD+EE,即一对将牌除开,剩余的牌全能组成顺子(ABC)或者刻子(DDD)。 2、胡牌算法解析 注:以下分析不包含特殊牌型,如对对胡,大对子等。 现有以下已胡手牌,14张: 六条做将牌,剩余的牌:一条 二条 三条 + 七条 八条 九条 + 三筒 三筒 三筒 + 四筒 五筒 六筒; 剔除将牌(既一对EE),剩余的牌都是顺子加刻子的组合,并且每种花色的牌也是顺子加刻子的组合。所以剔除将牌后,只要分析每种花色牌是否都满足3 ABC+3 DDD即可。不管是顺子还是刻子,都是3张牌一组为最小单位,所以从牌堆每次依次取三张牌分析是否满足ABC或DDD。 来源: CSDN 作者: 路边的猫 链接: https://blog.csdn.net/qq_41810721/article/details/103445528

NOIp2017D1T3 斗地主【暴搜】

淺唱寂寞╮ 提交于 2019-12-04 04:47:59
题目传送门 刚开始读到题目的时候,非常懵逼,非常崩溃,写着写着呢,也有点崩溃,细节有点多。 这个做法呢,只能过掉官方数据,洛谷上好像有加强版,只能得$86$分,就没有管了。 大概说一下思路: 暴力搜索每一种可能的情况,如果可以就递归下去,然后回溯。 搜索框架的话,大概就是把当前搜到的出牌次数传到参数里面,如果参数已经大于了当前的最小答案就剪枝退出。然后在当前状态下枚举每一种出牌的情况,能够出就出,然后递归到下一层,参数出牌次数+1。 可以证明不会无限递归下去,因为在参数已经大于了当前的最小答案的时候就退出了。 可以分为三大类出牌:顺子、带牌、散牌 还有一些细节什么的: 1.把$A$放在$K$后面,顺子的时候比较方便 2.$2$不能在顺子里面(当时还理解了好久$2$点是什么,还以为是什么其他代称...) 3.王。之前以为王只可以单出或者火箭,没有认真读题,王是可以被带的,但是只能带单牌,王不能看成一对,他们牌值不一样。 4.后来发现顺子和带牌打完之后,可以不用单独考虑打散牌(单牌,对子,三张牌),因为如果剩下,$1$次就可以打出去一种,而且无论如何只打$1$次用的打牌次数会最少。而且散牌不用考虑与其他牌的组合。(可以感性理解,次数最多肯定是每一次都按种数打散牌) 1 #include<cstdio> 2 #include<algorithm> 3 #include<vector> 4

Day1T3小w的魔术扑克——图论

本小妞迷上赌 提交于 2019-12-03 04:24:18
为什么不搞 \(T2\) ??? 因为我太菜了,那题我是真的搞不出来 题目描述 链接: https://ac.nowcoder.com/acm/contest/1100/C 来源:牛客网 小 \(w\) 喜欢打牌,某天小 \(w\) 与 \(dogenya\) 在一起玩扑克牌,这种扑克牌的面值都在 \(1\) 到 \(n\) ,原本扑克牌只有一面,而小 \(w\) 手中的扑克牌是双面的魔术扑克(正反两面均有数字,可以随时进行切换),小 \(w\) 这个人就准备用它来出老千作弊。小 \(w\) 想要打出一些顺子,我们定义打出一个 \(l\) 到 \(r\) 的顺子需要面值为从 \(l\) 到 \(r\) 的卡牌各一张。小 \(w\) 想问问你,他能否利用手中的魔术卡牌打出这些顺子呢? 输入描述: 首先输入一行2个正整数 \(n\) , \(k\) ,表示牌面为 \(1\) ~ \(n\) ,小 \(w\) 手中有 \(k\) 张魔术扑克牌。 然后输入 \(k\) 行,每行两个数字,表示卡牌的正面和反面的面值。 接下来输入一行一个正整数 \(q\) ,表示 \(q\) 组查询,然后每组占一行查询输入两个整数 \(l\) , \(r\) 。表示查询小 \(w\) 能否打出这么一个 \(l\) 到 \(r\) 的顺子。 输出描述: 对于输出" \(Yes\) "表示可以," \(No\)

扑克牌顺子

匿名 (未验证) 提交于 2019-12-03 00:39:02
题目描述 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10位数字本身,A为1,J为11,Q为12,K为13,而大王,小王可以看成任意数字。为了方便我们将大小王看成0。 思路: 1.找出5张牌中得大小王,即0的个数 2.将牌排序,找出相邻牌中的空隙数 3.如果空缺的总数小于或等于0的个数,那么数组是连续的。 在下面的代码中,使用了sort函数,第一个参数为数组首地址,第二个参数为数组尾地址,第三个参数为排序规则。默认为升序 我的代码: bool IsContinuous( vector< int > numbers ) { int len = numbers.size(); if (len< 5 ) return false ; sort(numbers.begin(),numbers.end()); int ZeroNum = 0 ; int GapNum = 0 ; for ( int i = 0 ; i < len;i++ ) { if (numbers[i] == 0 ) ZeroNum ++ ; } int x = ZeroNum; for ( int j = ZeroNum+ 1 ; j < len;j++ ) { if (numbers[j] == numbers[x]) return false ; GapNum += numbers[j]