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();

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

你可能感兴趣的:(C#)