鱼C论坛

 找回密码
 立即注册
查看: 1464|回复: 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。
例如:
输入:
12233445566677
33

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

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

int main()
{
    char sp[110] = {0};
    char b[5] = {0};
    while(~scanf("%s", sp))
    {
        char tp[110] = {0};
        int length = strlen(sp);
        scanf("%s", b);
        int len = strlen(b);
        int i = 0;
        int temp = 0;//temp=1表示可以出牌
        char ch = b[0];
        if(len == 5)    exchange(sp, length, tp);    //len=5的情况另外讨论,将所有重复手牌删去
        while(i < length)
        {
            if(len == 1)
            {
                if(ch < sp[i])
                    temp = 1;
            }
            else if(len == 2)
            {
                if(ch < sp[i] && (sp[i] == sp[i+1]))
                    temp = 1;
            }
            else if(len == 3)
            {
                if(ch < sp[i] && (sp[i] == sp[i+1]) && (sp[i] == sp[i+2]))
                    temp = 1;
            }
            else if(len == 4)
            {
                if(ch < sp[i] && (sp[i] == sp[i+1]) && (sp[i] == sp[i+2]) && (sp[i] == sp[i+3]))
                    temp = 1;
            }
            i++;
        }
        int lens = strlen(tp);
        if(len == 5)
        {
            i = 0;
            while(i < lens)
            {
                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))
                    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[0] = ch[0];
    for(i = 1; i < len; i++)
    {
        if(ch[i] != ch[i-1])
        {
            temp[j] = ch[i];
            j++;
        }
    }
}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 23:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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