迅雷笔试之-纸牌游戏有牛无牛

来源:互联网 发布:gzip linux 编辑:程序博客网 时间:2024/06/05 02:09

今日迅雷笔试题一:给定5张牌(除大小王),J/Q/K代表10,A代表1,其他数字还是对应数字。5张牌中有三张加起来是10的倍数就叫有牛,任意三张加起来都不等于10就叫无牛。有牛的情况下,剩余两张加起来的和的个位数为牛数,比如4+7则牛数为1。输入要求:五张牌以逗号分隔输入;输出要求:无牛和输入错误的情况输出“none”,有牛的情况下输出牛数。

#include<iostream>#include<map>using namespace std;int main(){    char a,b,c,d,e,aa,bb,cc,dd;    map<char,int> m;    m['2'] = 2, m['3'] = 3, m['4'] = 4, m['5'] = 5, m['6'] = 6, m['7'] = 7, m['8'] = 8;    m['9'] = 9, m['10'] = 10, m['A'] = 1, m['J'] = 10, m['Q'] = 10, m['K'] = 10;    while (cin>>a>>aa>>b>>bb>>c>>cc>>d>>dd>>e){        int errornum;        char sz[5] = {a,b,c,d,e};        map<char, int>::iterator ite = m.begin();        for (int q = 0; q < 5; ++q){            ite = m.find(sz[q]);            if (ite == m.end()){                cout << "none";                errornum = 0;                break;            }        }        if (errornum == 0)            continue;        int niunum=0;        int i = 0;        int j = i + 1;        int k = j + 1;        bool found = 0;        for (; i < 3; ++i){            for (j = i + 1; j < 4; ++j){                for (k = j + 1; k < 5; ++k){                    if ((m[sz[i]] + m[sz[j]] + m[sz[k]]) % 10 == 0){                        for (int p = 0; p < 5; ++p){                            if (p == i || p == j || p == k)                                continue;                            else                                niunum += m[sz[p]];                        }                        found = 1;                        cout << niunum % 10 << endl;                        break;                    }                           }                if (found)                    break;            }            if (found)                break;        }        if (i = 3 && j == 4 && k == 5)            cout << "none";    }    cin.get();    return 0;}
0 0
原创粉丝点击