首页 > 代码库 > 【编程题目】扑克牌的顺子
【编程题目】扑克牌的顺子
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.俩个闲玩娱乐(运算)。1.扑克牌的顺子从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的。2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意数字。*/#include <stdio.h>int getnum(char c) //默认输入的数字都是对的{ switch(c) { case ‘A‘: return 1; case ‘J‘: return 11; case ‘Q‘: return 12; case ‘K‘: return 13; default: return (c - ‘0‘); }}bool isContinues(char * cards, int n){ int record[13] = {0}; int max = 0, min = 14; int wnum = 0; //王的个数 for (int i = 0; i < n; i++) { if (cards[i] == ‘W‘) //王用 W表示 { wnum++; continue; } int num = getnum(cards[i]); if (record[num - 1] == 1) { return false; } else { record[num - 1] = 1; } max = (num > max) ? num : max; min = (num < min) ? num : min; } return ((max - min + 1) <= n && (max - min + 1) >= (n - wnum));}int main(){ char c[5] = {‘A‘,‘5‘,‘5‘,‘W‘,‘W‘}; bool f = isContinues(c, 5); return 0;}
网上的思路都是用排序,我觉得我的思路就挺好的,只需循环一遍,空间换时间了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。