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

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;
}

网上的思路都是用排序,我觉得我的思路就挺好的,只需循环一遍,空间换时间了。

转载于:https://www.cnblogs.com/dplearning/p/3916935.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值