C++扑克程序怎么写

C++扑克
一个扑克,他玩的游戏使用1幅扑克牌(不使用大鬼和小鬼),共52张牌。他今天运气不好,一直在输,他怀疑扑克牌被动了手脚:如果他能发现2张牌花色和大小都一样,那么就能确定牌有问题。

输入:第一行是正整数n代表已经打出几张牌,以下n行依次为这些牌的花色和大小。
输出:如果发现了问题,就输出I am angry,否则输出Nice hand。
输入样例:
5
diamond 8
spade A
diamond 10
heart Q
diamond 8

输出样例:
I am angry
这个程序应该怎么写?

参考如下,还望采纳:
具体实现:

1、读入牌的数量 n,和每张牌的花色和大小;
2、定义一个map存储已经打出的牌,键为 "花色+大小",值为牌数;
3、对于每一张牌,如果在map中找到了对应的键,那么对应的牌数加1;如果牌数>=2,则直接输出 "I am angry",退出程序;
4、如果扫完所有的牌都没有出现问题,则输出 "Nice hand"。

代码如下:

#include <iostream>
#include <unordered_map>
using namespace std;

const int N = 55;
int n;
unordered_map<string, int> h;

int main() {
    cin >> n;
    while (n--) {
        string a, b;
        cin >> a >> b;
        string t = a + b;
        h[t]++;
        if (h[t] == 2) {
            cout << "I am angry" << endl;
            return 0;
        }
    }
    cout << "Nice hand" << endl;
    return 0;
}



#include <iostream>
#include <string>
#include <map>

using namespace std;

const map<string, int> suit = {{"Spade", 1}, {"Heart", 2}, {"Club", 3}, {"Diamond", 4}};
const map<string, int> rank = {{"2", 2}, {"3", 3}, {"4", 4}, {"5", 5}, {"6", 6}, {"7", 7}, {"8", 8}, {"9", 9}, 
                                {"10", 10}, {"J", 11}, {"Q", 12}, {"K", 13}, {"A", 14}};

int main() {
    int n;
    cin >> n;
    bool flag = false;
    map<pair<int, int>, int> m;
    while (n--) {
        string s1, s2;
        cin >> s1 >> s2;
        int r = rank.at(s2), c = suit.at(s1);
        if (++m[{r, c}] == 2) {
            flag = true;
            break;
        }
    }
    if (flag) cout << "I am angry" << endl;
    else cout << "Nice hand" << endl;
    return 0;
}

代码中使用了 STL 中的 map,将花色和点数映射到整数,并利用 pair 记录已出的牌的状态,如果有重复的牌就说明问题出现了。