鱼C论坛

 找回密码
 立即注册
查看: 1765|回复: 0

[技术交流] 判断手牌是否能够压过对方的出牌

[复制链接]
发表于 2020-2-28 21:26:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌。
规则:出牌牌型有5种:
[1]一张 如4 则5...9可压过
[2]两张 如44 则55,66,77,...,99可压过
[3]三张 如444 规则如[2]
[4]四张 如4444 规则如[2]
[5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大。

每组输入两个字符串(字符串大小不超过100)a,b。a字符串代表手中牌,b字符串代表出的牌。若能压过,输出YES,否则输出NO。
例如:
输入:
  1. 12233445566677
  2. 33
复制代码


输出:
  1. YES
复制代码

我的想法是分为两种情况,第一种是1-4张牌,直接由手牌判断。第二种是先将手牌中的重复的牌删去,再判断是否有大过b的牌。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. void exchange(char*, int, char*);//将手牌里的重复的牌删掉

  5. int main()
  6. {
  7.     char sp[110] = {0};
  8.     char b[5] = {0};
  9.     while(~scanf("%s", sp))
  10.     {
  11.         char tp[110] = {0};
  12.         int length = strlen(sp);
  13.         scanf("%s", b);
  14.         int len = strlen(b);
  15.         int i = 0;
  16.         int temp = 0;//temp=1表示可以出牌
  17.         char ch = b[0];
  18.         if(len == 5)    exchange(sp, length, tp);    //len=5的情况另外讨论,将所有重复手牌删去
  19.         while(i < length)
  20.         {
  21.             if(len == 1)
  22.             {
  23.                 if(ch < sp[i])
  24.                     temp = 1;
  25.             }
  26.             else if(len == 2)
  27.             {
  28.                 if(ch < sp[i] && (sp[i] == sp[i+1]))
  29.                     temp = 1;
  30.             }
  31.             else if(len == 3)
  32.             {
  33.                 if(ch < sp[i] && (sp[i] == sp[i+1]) && (sp[i] == sp[i+2]))
  34.                     temp = 1;
  35.             }
  36.             else if(len == 4)
  37.             {
  38.                 if(ch < sp[i] && (sp[i] == sp[i+1]) && (sp[i] == sp[i+2]) && (sp[i] == sp[i+3]))
  39.                     temp = 1;
  40.             }
  41.             i++;
  42.         }
  43.         int lens = strlen(tp);
  44.         if(len == 5)
  45.         {
  46.             i = 0;
  47.             while(i < lens)
  48.             {
  49.                 if(ch < tp[i] && (tp[i+1] - tp[i] == 1) && (tp[i+2] - tp[i] == 2) && (tp[i+3] - tp[i] == 3) && (tp[i+4] - tp[i] == 4))
  50.                     temp = 1;
  51.                 i++;
  52.             }
  53.         }
  54.         if(temp == 1)
  55.             printf("YES\n");
  56.         else
  57.             printf("NO\n");
  58.     }
  59. }

  60. void exchange(char ch[], int len, char temp[])
  61. {
  62.     int i, j = 1;
  63.     temp[0] = ch[0];
  64.     for(i = 1; i < len; i++)
  65.     {
  66.         if(ch[i] != ch[i-1])
  67.         {
  68.             temp[j] = ch[i];
  69.             j++;
  70.         }
  71.     }
  72. }
复制代码




小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-5 05:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表