九度OJ 1175:打牌 (模式匹配)

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:8156

解决:1560

题目描述:

牌只有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
来源:
2010年北京邮电大学网院研究生机试真题

思路:

不算难的模式匹配。


代码:

#include <stdio.h>
#include <string.h>
 
int main(void)
{
    int i;
    char a[101], b[6];
    int c[10];
    int res;
 
    while (scanf("%s", a) != EOF)
    {
        for (i=0; i<10; i++)
            c[i] = 0;
        for(i=0; a[i]; i++)
            c[a[i]-48] ++;
        scanf("%s", b);
        int type = strlen(b);
        res = 0;
        if (type <= 4)
        {
            for (i=b[0]-48+1; i<10; i++)
            {
                if (c[i] >= type)
                {
                    res = 1;
                    break;
                }
            }
        }
        else
        {
            if (b[0] != '5')
            {
                for (i=b[0]-48+1; i<=5; i++)
                {
                    if (c[i]>0 && c[i+1]>0 && c[i+2]>0 && c[i+3]>0 && c[i+4]>0)
                    {
                        res = 1;
                        break;
                    }
                }
            }
        }
        if (res == 1)
            printf("YES\n");
        else
            printf("NO\n");
    }
 
    return 0;
}
/**************************************************************
    Problem: 1175
    User: liangrx06
    Language: C
    Result: Accepted
    Time:10 ms
    Memory:912 kb
****************************************************************/


你可能感兴趣的:(C语言,模式匹配,OJ,九度)