zoukankan      html  css  js  c++  java
  • 【编程题目】扑克牌的顺子

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

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

  • 相关阅读:
    dos命令大全
    死亡之ping(Ping of Death)
    硬盘安装系统
    DataGrid实现逻辑分页
    DropDownList另一种写法
    DataGrid3
    DataGrid2
    hidden(隐藏域)
    sql合并列
    未找到与约束contractname Microsoft.VisualStudio.Utilities.IContentTypeRegistryService...匹配的导出
  • 原文地址:https://www.cnblogs.com/dplearning/p/3916935.html
Copyright © 2011-2022 走看看