zoukankan      html  css  js  c++  java
  • NJU 模拟试题 2

    从扑克牌中抽出5张无序纸牌,判断纸牌是否为顺子。1代表A,11代表J,12代表Q,13代表K,0代表大小王并可以视为任意纸牌。是则输出YES,否则输出NO。

    #include <iostream>
    #include <algorithm>
    using namespace std;
    bool judge(int *a,int n)
    {
        n++;
        while (n < 5)
        {
            if (a[n - 1] == a[n]) return false;
            n++;
        }
        return true;
    }
    int main()
    {
        int a[5], joker = 0;
        for (int i = 0; i < 5; i++)
            cin >> a[i];
        sort(a, a + 5);
        for (int i = 0; i < 5; i++)
        {
            if (a[i] == 0) joker++;
            else
            {
                if (judge(a, i) && (a[4] - a[i]) - (4 - i) <= joker)
                    cout << "YES";
                else cout << "NO";
                break;
            }
        }
        return 0;
    }

    思路:首先判断是否存在重复卡牌,有则不会是顺子

    然后看 卡牌区间宽度 是否和 牌数量的宽度 相符合。joker的存在可以容许牌数量宽度的扩展。

    这个方法不用考虑是否处于边界,因为可以向另一个方向补位

    具体分析:

    0 0 1 4 5

    卡牌区间宽度为5-1=4,牌数量宽度为4-2=2。此时的两个joker可以使牌数量宽度与卡牌区间宽度匹配。

    0 1 3 4 5

    卡牌区间宽度为5-1=4,牌数量宽度为4-1=3。刚好又有一个joker。

    1 2 3 4 5

    卡牌区间宽度为5-1=4,牌数量宽度为4-0=4。此时就是顺子了。

    0 0 1 2 3

    卡牌区间宽度为3-1=2,牌数量宽度为4-2=2。这也是顺子,joker向4 5的方向补位。

    0 0 1 5 6

    卡牌区间宽度为6-1=5,牌数量宽度为4-2=2。需要三个joker来补,但是只有两个,所以不是顺子。

  • 相关阅读:
    php测试数据库
    mysql查
    mysql增删改
    mysql数据类型
    Docker 探索安装WordPress+Mysql8.0
    Docker For MYSQL 8.0 特别注意修复数据库新的验证方式
    Docker EE/Docker CE简介与版本规划
    Hyper和Vmware冲突,Device/Credential Guard 不兼容
    利用阿里云加速Docker For Windows
    使用Aliyun Docker 容器镜像/注册表服务
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/8274401.html
Copyright © 2011-2022 走看看