C# 自嗨:2019年安徽省程序设计大赛题目——纸牌识别

原题链接:https://blog.csdn.net/weixin_43581819/article/details/90405178

时间限制:2s
描述:
Alice沉迷于机器人研究,他打算做一个机器人来检查一副扑克是否完成,现在,他想请你帮他写一个程序,来识别纸牌。每张纸牌都有一个花色(四种花色,分别用大写字母P,K,H,T表示)和一个数字点数(1-13).纸牌可以用ABC的形式来表示,A代表花色,BC代表数字,如果数字小于10,会有一位补0.比如花色是P,数字是9的纸牌会表示成P09.一副完整的纸牌有52张牌,四种不同的花色各有1张数字1-13的牌。
你的程序要读入一个字符串,表示缺少的纸牌有哪些,如果包含相同的纸牌(花色数字都相同)输出GRESKA,否则输入每种花色剩余的纸牌数量。

输入
输入只有一行,一个字符串s,s的长度小于等于1000.

输出
如果输入中包含相同的纸牌,输出GRESKA,否则分别输入四个整数,代表P,K,H,T四种花色纸牌的剩余数量。

样例输入1
P01K02H03H04
样例输出1
12 12 11 13

样例输入2
H02H10P11H02
样例输出2
GRESKA
提示
样例1中P花色缺少P01,所以只有12张,K花色缺少K02,所以也只有12张,H花色缺少两张;T花色不缺牌。

思路

直接模型法搞定:

1 创建牌组

2 3个3个的获取输入字符串

3 将获取到的字符串从牌组中匹配并去除

3.1 如果匹配成功则删除该牌后继续下一个

3.2 如果匹配失败肯定是之前删除过直接【GRESKA】

4 显示各牌组数量

			//P,K,H,T
            List<string> p_cards = new List<string>() { };
            List<string> k_cards = new List<string>() { };
            List<string> h_cards = new List<string>() { };
            List<string> t_cards = new List<string>() { };

            for (int i = 1; i <= 13; i++)// 构建牌组
            {
                if (i < 10)
                {
                    p_cards.Add("P0" + i);
                    k_cards.Add("K0" + i);
                    h_cards.Add("H0" + i);
                    t_cards.Add("T0" + i);
                }
                else 
                {
                    p_cards.Add("P" + i);
                    k_cards.Add("K" + i);
                    h_cards.Add("H" + i);
                    t_cards.Add("T" + i);
                }
            }
            List<List<string>> cards = new List<List<string>>() { p_cards, k_cards, h_cards, t_cards }; 
            string readLineString = "H02H10P11H02";// 长度及输入验证略
            Console.WriteLine(readLineString);
            bool isGRESKA = false;
            while (true) 
            {
                bool isFind = false;
                foreach (List<string> _cards in cards)
                {
                    isFind=_cards.Remove(readLineString.Substring(0, 3));
                    if (isFind) break;
                }

                if (!isFind) 
                {
                    Console.WriteLine("GRESKA");
                    isGRESKA = true;
                    break;
                }

                if (readLineString.Length > 3)
                {
                    readLineString = readLineString.Substring(3);
                }
                else break;
            }

            if (!isGRESKA) 
            {
                foreach (List<string> _cards in cards)
                {
                    Console.Write(_cards.Count + "\t");
                }
            }
            Console.WriteLine();

            Console.ReadKey();

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值