Ranbo_ 发表于 2020-2-28 21:26:55

判断手牌是否能够压过对方的出牌

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

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

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

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

int main()
{
    char sp = {0};
    char b = {0};
    while(~scanf("%s", sp))
    {
      char tp = {0};
      int length = strlen(sp);
      scanf("%s", b);
      int len = strlen(b);
      int i = 0;
      int temp = 0;//temp=1表示可以出牌
      char ch = b;
      if(len == 5)    exchange(sp, length, tp);    //len=5的情况另外讨论,将所有重复手牌删去
      while(i < length)
      {
            if(len == 1)
            {
                if(ch < sp)
                  temp = 1;
            }
            else if(len == 2)
            {
                if(ch < sp && (sp == sp))
                  temp = 1;
            }
            else if(len == 3)
            {
                if(ch < sp && (sp == sp) && (sp == sp))
                  temp = 1;
            }
            else if(len == 4)
            {
                if(ch < sp && (sp == sp) && (sp == sp) && (sp == sp))
                  temp = 1;
            }
            i++;
      }
      int lens = strlen(tp);
      if(len == 5)
      {
            i = 0;
            while(i < lens)
            {
                if(ch < tp && (tp - tp == 1) && (tp - tp == 2) && (tp - tp == 3) && (tp - tp == 4))
                  temp = 1;
                i++;
            }
      }
      if(temp == 1)
            printf("YES\n");
      else
            printf("NO\n");
    }
}

void exchange(char ch[], int len, char temp[])
{
    int i, j = 1;
    temp = ch;
    for(i = 1; i < len; i++)
    {
      if(ch != ch)
      {
            temp = ch;
            j++;
      }
    }
}




页: [1]
查看完整版本: 判断手牌是否能够压过对方的出牌