顺子

剑指:扑克牌的顺子

折月煮酒 提交于 2019-12-02 06:33:16
题目描述 从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。 2~10 为数字本身, A 为 1 , J 为 11 , Q 为 12 , K 为 13 ,大小王可以看做任意数字。 为了方便,大小王均以 0 来表示,并且假设这副牌中大小王均有两张。 样例1 输入:[8,9,10,11,12] 输出:true 样例2 输入:[0,8,9,11,12] 输出:true 解法一 对数组排序; 计算出 0 的个数 zeroCount ; 从第一个不是 0 的数字开始遍历,与后一个数字比较,如果相等,直接返回 false ;否则累计 gap ; 判断 zeroCount 是否大于等于 gap 。 import java.util.Arrays; class Solution { /** * 判断是否是连续的数字 * * @param numbers 数组 * @return 是否是顺子 */ public boolean isContinuous(int [] numbers) { if (numbers == null || numbers.length == 0) { return false; } int zeroCount = 0; Arrays.sort(numbers); for (int e : numbers) { if (e > 0) { break;

第二次结对编程作业

混江龙づ霸主 提交于 2019-12-01 10:25:58
1.导航 博客链接 031702422_朱宏 031702420_张庆焰 队友本作业博客链接 Github Ra9zer/13Water zaqny/13Water 2.具体分工 我负责算法 队友负责前、后端与博客撰写 3.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(min) 实际耗时(min) Planning 计划 60 90 Estimate 估计这个任务需要多少时间 90 120 Development 开发 600 1200 Analysis 需求分析 (包括学习新技术) 90 120 Design Spec 生成设计文档 60 90 Design Review 设计复审 60 90 Coding Standard 代码规范 (为开发制定合适的规范) 60 60 Design 具体设计 60 120 Coding 具体编码 480 600 Code Review 代码复审 120 240 Test 测试 (自我测试,修改,提交修改) 180 240 Reporting 报告 90 120 Test Report 测试报告 30 60 Size Measurement 计算工作量 20 20 Postmortem & Process Improvement Plan 事后总结 并提出过程改进计划 30 30 合计

第二次结对编程作业

时光怂恿深爱的人放手 提交于 2019-12-01 10:13:13
结对同学博客 本次作业博客 Github地址 2.具体分工 林银河:完成AI的实现 王耀鑫:完成UI的实现 3.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 10 20 Estimate 估计这个任务需要多少时间 600 700 Development 开发 1200 1800 Analysis 需求分析 (包括学习新技术) 100 300 Design Spec 生成设计文档 10 10 Design Review 设计复审 10 10 Coding Standard 代码规范 (为目前的开发制定合适的规范) 10 10 Design 具体设计 10 20 Coding 具体编码 500 700 Code Review 代码复审 5 5 Test 测试(自我测试,修改代码,提交修改) 5 5 Reporting 报告 10 15 Test Repor 测试报告 5 5 Size Measurement 计算工作量 5 5 Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 5 10 合计 1285 1815 4.解题思路描述与设计实现说明 网络接口的使用 按照所给的网络接口进行连接 将接收到的数据,使用正则表达式

61-扑克牌中的顺子

主宰稳场 提交于 2019-11-30 10:21:57
题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。 def is_continous(arrys): cnt_0 = arrys.count(0) res = sorted(arrys) i,length = cnt_0,len(res) cnt = 0 while i<length-1: if res[i+1]-res[i]==0: return False if res[i+1]-res[i]>1: cnt = cnt+res[i+1]-res[i]-1 i += 1 if cnt_0>=cnt: return True return False   注:1、统计数组中0的个数,即大小王的个数 2、对数组进行排序 3、遍历数组,统计数组非0部分的间隔和。如果遇到有相邻相同的即表示不能组成连续的数组,返回False 4、最后与0 的个数进行比较,如果小于等于0的个数即连续,否则,不连续。 来源: https://www.cnblogs.com/kingshine007/p/11578520.html

剑指offer——扑克牌顺子

﹥>﹥吖頭↗ 提交于 2019-11-30 05:06:45
题目描述 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。 完整代码 思想: 将扑克牌排序 统计0的个数 判断能否构成顺子:将非零部分:max(num)-min(num)-1=中间部分应该有几个数,如果0的个数+中间部分实际上有的数的个数==刚刚计算的值,那么说明是顺子 特别说明: 当非零部分只有一个数的时候,一定是顺子 没有数的时候,不是顺子,返回false class Solution { public : bool IsContinuous ( vector < int > numbers ) { int i = 0 , l = numbers . size ( ) ;

LeetCode 659. Split Array into Consecutive Subsequences

老子叫甜甜 提交于 2019-11-29 08:43:38
很有意思的一道题,对于每一个element,我们有两种选择: 1. 把它加入之前构造好的顺子中 2. 用它新开一个顺子 此处用贪心策略,如果1能满足总是先满足1,因为新开顺子可能失败,即使新开顺子成功,当1能满足的时候,将新开顺子加入之前的顺子也能成功,所以能够选择策略1的时候没必要冒风险选择策略2。 因此我们需要一个hashtable来记录顺子结尾到哪了,同时也要知道各个元素的frequency,由此判断能不能够开新顺子。 class Solution { public: bool isPossible(vector<int>& nums) { unordered_map<int,int> count; for (int num:nums) ++count[num]; unordered_map<int,int> tails; // tail needed -> num for (int num:nums){ if (count[num]==0) continue; --count[num]; if (tails[num]>0){ // append to an existing sequence --count[num]; --tails[num]==0; ++tails[num+1]; }else{ // start a new sequence --count[num];

P4050 [JSOI2007]麻将

≯℡__Kan透↙ 提交于 2019-11-28 23:48:47
传送门 怎么好像没什么人写 $dp$ ...? 设 $f[i][j][k][0/1]$ 表示当前处理完前 $1$ 到 $i$ 的数,上一位开始的顺子有 $j$ 个,当前位开始的顺子有 $k$ 个,是否已经有雀头,的情况下能不能胡 因为连续三个顺子其实等价于三个刻字,所以我们只要考虑顺子小于 $3$ 的情况,即 $j,k$ 都小于 $3$ 然后枚举下一位的顺子数量并把当前位的顺子补好,剩下的全做刻字,顺便处理一下雀头就行 然后枚举每种可能的听牌,跑一遍 $dp$ 看看有没有解 具体怎么 $dp$ 也挺好想的,看代码注释吧... 复杂度 $O(不会算)$,反正跑得飞快 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<vector> using namespace std; typedef long long ll; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch

扑克牌顺子

雨燕双飞 提交于 2019-11-28 22:57:30
题目描述 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。 好吧这个题只是看上去长,思路在于统计扑克牌次数,在根据最大牌和最小牌的距离和大小王数量加上1数量牌数比较来进行判断 , 如果大于则false,小于则ture。 同时抽牌数大于13肯定不能为顺子,会有重复,也需处理小于13张牌时的重复不能为顺子的问题 举个例子: 2,3,5,7,8,10,0,0,0,0 牌数 最小值为2,最大值为10 所以为顺子需要 10 - 2 + 1 = 9 张牌 现在 有2-10的牌数为 6 王牌数为4 6 + 4 >= 9 所以可以为顺子 2,3,5,7,8,10,0,0 牌数 现在

剑指offer45:扑克牌顺子

淺唱寂寞╮ 提交于 2019-11-28 19:29:43
1 题目描述   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。 2 思路和方法   (1)首先应该对 数组进行排序 。   (2)统计数组中大小王(0)出现的个数。   (3)统计数组中所有 相邻数之间的间隔 。   (4)同时还需要排除对子的情况,如果出现了对子,那么肯定不可能是顺子(0除外)。   (5)最后比较0的个数和间隔大小, 如果0的个数大于等于间隔数,说明可以组成顺子 。 3 C++核心代码 1 class Solution { 2 public: 3 bool IsContinuous( vector<int> numbers ) { 4 if

棋牌平台开发教程之扎金花大小比较算法在php中的实现

送分小仙女□ 提交于 2019-11-27 18:04:01
PHP中扎金花比大小如何实现 在棋牌游戏中,不管是现实的还是线上的,扎金花无疑是最热门棋牌游戏之一,鄙人从小就酷爱扎金花,机缘巧合后面从事了IT行业,话不多说,直接进去正题吧。 扎金花两副牌的比较规则就不说了,注明一下是顺子的时候 : JQK < A23 < QKA 下面是个人一点建议,供大家参考!(有哪里不对的欢迎指教 棋牌平台开发: www.yasewl.com) 思路:扎金花 1. 随机生成两幅牌,每副牌结构为 复制代码 代码如下: array( array('Spade','K'), array('Club','6'), array('Spade','J'), ) 复制代码 代码如下: array( array('Spade','K'), array('Club','6'), array('Spade','J'), ) 2. 计算每副牌的分值:每副牌有个原始大小(即排除对子,顺子,金花,顺金,筒子的大小),再 每张牌的分值为一个2位数,不足2位的补前导0,例如'A':14,‘10':10,'2‘:'02‘,'k‘:13,'7‘:07 将3张牌按点数大小排序(从大到小),凑成一个6位数。例如'A27':140702,‘829':090802,‘JK8':131108,‘2A10':141002 例外,对于对子要将对子的位数放在前两位(后面会看到为什么这么做)。例如‘779'