zoukankan      html  css  js  c++  java
  • [编程题-搜狐]扎金花

    [编程题] 扎金花
     两个搜狐的程序员加了一个月班,终于放假了,于是他们决定扎金花渡过愉快的假期 。
    
    游戏规则:
    共52张普通牌,牌面为2,3,4,5,6,7,8,9,10,J,Q,K,A之一,大小递增,各四张; 每人抓三张牌。两人比较手中三张牌大小,大的人获胜。 
    
    对于牌型的规则如下: 
    1.三张牌一样即为豹子 
    2.三张牌相连为顺子(A23不算顺子) 
    3.有且仅有两张牌一样为对子 豹子>顺子>对子>普通牌型 在牌型一样时,比较牌型数值大小(如AAA>KKK,QAK>534,QQ2>10104) 在二人均无特殊牌型时,依次比较三张牌中最大的。大的人获胜,如果最大的牌一样,则比较第二大,以此类推(如37K>89Q) 如二人牌面相同,则为平局。 


    输入描述:
    输入两个字符串代表两个玩家的牌(如"10KQ" "354"),先输入的作为玩家1,后输入的作为玩家2


    输出描述:
    1 代表 玩家1赢 0 代表 平局 -1 代表 玩家2赢 -2 代表不合法的输入

    输入例子:
    KQ3 3Q9
    10QA 6102
    5810 7KK
    632 74J
    10102 K77
    JKJ 926
    68K 27A

    输出例子:
    1
    1
    -1
    -1
    1
    1
    -1
    #include<iostream>
    #include<vector>
    #include<string>
    #include<algorithm>
    using namespace std;
    int str2dig(string s)
    {
        int n = s.size();
        if (n == 2)
        {
            if (s[0] == '1' && s[1] == '0')
                return 10;
            else
                return -1;
        }
        else if (n == 1)
        {
            switch (s[0])
            {
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9': return s[0] - '2' + 2;
            case 'J': return 11;
            case 'Q': return 12;
            case 'K': return 13;
            case 'A': return 14;
            default: return -1;
            }
        }
        else
            return -1;
    }
    void f(string s, vector<int>& v)
    {
        int n = s.size();
        if (n == 0) return;
        int val;
        if (s[n - 1] == '0' && n >= 2)
        {
            val = str2dig(s.substr(n - 2, 2));
            v.push_back(val);
            if (val == -1)
                return;
            else
                f(s.substr(0, n - 2), v);
        }
        else
        {
            val = str2dig(s.substr(n - 1, 1));
            v.push_back(val);
            if (val == -1)
                return;
            else
                f(s.substr(0, n - 1), v);
        }
    }
    void f1(vector<int>&v)
    {
        if (v[v.size() - 1] == -1) return;
        if (v.size() != 3)
        {
            v.push_back(-1);
            return;
        }
        sort(v.begin(), v.end());
        if (v[0] == v[2])
        {
            v.push_back(4);
            return;
        }
        else if (v[0] + 1 == v[1] && v[1] + 1 == v[2])
        {
            v.push_back(3);
            return;
        }
        else if (v[0] == v[1] || v[1] == v[2])
        {
            if (v[0] == v[1])
                swap(v[0], v[2]);
            v.push_back(2);
            return;
        }
        else
        {
            v.push_back(1);
            return;
        }
    }
    int cmp(vector<int>& lhs, vector<int>& rhs)
    {
        int n = lhs.size();
        if (n == 0) return 1;
        else
        {
            if (lhs[n - 1] > rhs[n - 1]) return 1;
            else if (lhs[n - 1] < rhs[n - 1]) return -1;
            else
            {
                lhs.pop_back();
                rhs.pop_back();
                return cmp(lhs, rhs);
            }
        }
    }
    int main()
    {
        string s1, s2;
        while (cin >> s1 >> s2)
        {
            vector<int> v1;
            vector<int> v2;
            f(s1, v1);
            f(s2, v2);
            f1(v1);
            f1(v2);
            if (v1[v1.size() - 1] == -1 || v2[v2.size() - 1] == -1)
            {
                cout << "-2" << endl;
            }
            else
            {
                int c = cmp(v1, v2);
                if (c == 1) cout << "1" << endl;
                else if (c == -1) cout << "-1" << endl;
                else cout << "0" << endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    python 的基础 学习 第六天 基础数据类型的操作方法 字典
    python 的基础 学习 第五天 基础数据类型的操作方法
    python 的基础 学习 第四天 基础数据类型
    ASP.NET MVC 入门8、ModelState与数据验证
    ASP.NET MVC 入门7、Hellper与数据的提交与绑定
    ASP.NET MVC 入门6、TempData
    ASP.NET MVC 入门5、View与ViewData
    ASP.NET MVC 入门4、Controller与Action
    ASP.NET MVC 入门3、Routing
    ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  • 原文地址:https://www.cnblogs.com/learning-c/p/5745694.html
Copyright © 2011-2022 走看看