2020-03-06 C - 瑞神打牌

题意

有东南西北四个方向,首先指定在某个方向上的人开始发牌,然后从这个方向开始,按照东南西北的顺序,从发牌人的下一个人开始发牌,一人发一张轮流发牌,输入的数据是两串string类型的编码,每两个是一组,一组中第一个是这张牌的花色,第二个事这张牌的大小,要求计算出东南西北四个方向上的每个人的的所有牌,然后按照花色和牌的大小,双关键字排序。

思路

首先想到的是vector数组,,申请4个,代表四个方向的四个人,然后里面是pair<char,char>类型变量,用这种变量来存储每个人的所有牌,用string来存储输入的两组牌面数据,然后发现,每一轮在这组数据中占8位,因为有4个人,每张牌有花色和大小,所以我设计一个for循环,里面的变量i每次加8位,每次一个循环中,就让每个人的vector读取数据中的两位,这样4个人的正确取牌获得,然后我用map,存储所有的牌面和花色的大小,编写一个双关键字比较函数,其中用map来把花色和牌面转成实际值来放进sort函数来进行排序,一开始的时候,我还是设置了另一个map,用来存储东南西北每个方向的下一个方向是什么,最后的时候要求从南方向开始输出,所以最后的时候,用这个map来把开始的时候每个方向上的人和相应的vector数组连接输出即可。

总结

这道题考察如何存储每个人的牌,还有把每个人和相应的方向相联系的操作,还有一个就是,在牌面和花色有部分是字母的情况下,如何进行排序的问题。

AC代码

#include<iostream>
#include<string.h>
#include<utility>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
string simple, simple2;
vector<pair<char, char> > people[4];
map<char, int> dot;
map<char, char> Next;
map<char, int> dui;
bool cmp(pair<char, char> a, pair<char, char> b)
{
    if (a.first != b.first)return dot[a.first] < dot[b.first];
    return dot[a.second] < dot[b.second];
}
void print(int k)
{
    cout << '+';
    for (int i = 0; i < 13; i++)
    {
        cout << "---+";
    }
    cout << endl;
    cout << "|";
    for (int i = 0; i < 13; i++)
    {
        cout << people[k][i].second<<" "<< people[k][i].second<<"|";
    }
    cout << endl;
    cout << "|";
    for (int i = 0; i < 13; i++)
    {
        cout << " " << people[k][i].first << " " << "|";
    }
    cout << endl;
    cout << "|";
    for (int i = 0; i < 13; i++)
    {
        cout << people[k][i].second << " " << people[k][i].second << "|";
    }
    cout << endl;
    cout << '+';
    for (int i = 0; i < 13; i++)
    {
        cout << "---+";
    }
    cout << endl;
}
int main()
{
    for (int i = 0; i < 4; i++)
    {
        people[i].resize(13);
    }
    Next['N'] = 'E';
    Next['E'] = 'S';
    Next['S'] = 'W';
    Next['W'] = 'N';
    dot['C'] = 0;
    dot['D'] = 1;
    dot['S'] = 2;
    dot['H'] = 3;
    dot['T'] = 10;
    dot['J'] = 11;
    dot['Q'] = 12;
    dot['K'] = 13;
    dot['A'] = 14;
    dot['2'] = 2;
    dot['3'] = 3;
    dot['4'] = 4;
    dot['5'] = 5;
    dot['6'] = 6;
    dot['7'] = 7;
    dot['8'] = 8;
    dot['9'] = 9;
    char begin;
    while (1)
    {
        cin >> begin;
        char then=begin;
        for (int i = 0; i < 4; i++)
        {
            then = Next[then];
            dui[then] = i;
        }
        if (begin == '#')
            break;
        cin >> simple >> simple2;
        simple = simple + simple2;
        int b = 0;
        for (int i = 0; i < 104; i +=8 )
        {
            people[0][b]=make_pair(simple[i], simple[i + 1]);
            people[1][b]=make_pair(simple[i+2], simple[i + 3]);
            people[2][b]=make_pair(simple[i + 4], simple[i + 5]);
            people[3][b]=make_pair(simple[i+6], simple[i + 7]);
            b++;
        }
        for (int i = 0; i < 4; i++)
        {
            sort(people[i].begin(), people[i].end(), cmp);
        }
        char th='S';
        for (int i = 0; i < 4; i++)
        {
            int k = dui[th];
            switch (th)
            {
                case    'S':
                    cout << "South player:" << endl;
                    break;
                case 'E':
                    cout << "East player:" << endl;
                    break;
                case 'W':
                    cout << "West player:" << endl;
                    break;
                case 'N':
                    cout << "North player:" << endl;
                    break;
            }
            print(k);
            th = Next[th];
        }
        cout << endl;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 牌局由四个人构成,围成一圈。我们称四个方向为北 东 南 西。对应的英文是North,East,South,West...
    Picksy阅读 99评论 0 0
  • STL部分 1.STL为什么广泛被使用 C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vec...
    杰伦哎呦哎呦阅读 4,312评论 0 9
  • 西风卷起残叶蹉!叶飘零,枯枝似我?盛年如水飞梭过。去留皆随意,往来因果。 半生浪迹空蹉峨。太情深,缘份尚可!红尘躁...
    影曳香弄阅读 456评论 2 8
  • 分享球权以及多一次传球 重要的不是谁得分,而是如何制造出轻松得分机会 不论队伍采取什么进攻套路方式,重要的目标都是...
    laoxia阅读 632评论 0 0
  • 3月25日重读《富爸爸给你的钱找份工作》有感:人为什么会自信,因为自己可以做到,而且做的好。为什么我不愿意在学校,...
    王喜庆财商阅读 158评论 0 0