首页 > 试题广场 >

打牌

[编程题]打牌
  • 热度指数:13002 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
牌只有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
33

输出

YES
#include<stdio.h>
int main(){
    char hand[105],desk[10];
    while(scanf("%s",&hand)!=EOF){
        int nums1[10],len2=0;
        scanf("%s",&desk);
        for(int i=0;i<10;i++){
            nums1[i]=0;
        }
        for(int i=0;hand[i]!='\0';i++){
            int x=hand[i]-'0';
            nums1[x]++;
        }
        for(int i=0;desk[i]!='\0';i++){
            len2++;
        }
        if(len2==1){
            int flag=0,y=desk[0]-'0';
            for(int i=y+1;i<10;i++){
                if(nums1[i]!=0){
                    flag=1;
                    printf("YES");
                    break;
                }
            }
            if(flag==0) printf("NO");
        }
        if(len2==2){
            int flag=0,y=desk[0]-'0';
            for(int i=y+1;i<10;i++){
                if(nums1[i]>1){
                    flag=1;
                    printf("YES");
                    break;
                }
            }
            if(flag==0) printf("NO");
        }
        if(len2==3){
            int flag=0,y=desk[0]-'0';
            for(int i=y+1;i<10;i++){
                if(nums1[i]>2){
                    flag=1;
                    printf("YES");
                    break;
                }
            }
            if(flag==0) printf("NO");
        }
        if(len2==4){
            int flag=0,y=desk[0]-'0';
            for(int i=y+1;i<10;i++){
                if(nums1[i]>3){
                    flag=1;
                    printf("YES");
                    break;
                }
            }
            if(flag==0) printf("NO");
        }
        if(len2==5){
            int flag=0,y=desk[0]-'0';
            for(int i=y+1;i<6;i++){
                int count=0;
                for(int j=0;j<5;j++){
                    if(nums1[i+j]!=0) count++;
                }
                if(count==5){
                    flag=1;
                    printf("YES");
                    break;
                }
            }
            if(flag==0) printf("NO");
        }
    }
    return 0;
}

发表于 2022-03-28 15:56:38 回复(0)
#include<stdio.h>
#include<string.h>

int main(void) {
    int tmp[10] = {0};
    char a[100];
    char b[5];
    scanf("%s", &a);
    scanf("%s", &b);
    int i;
    for (i=0; i<strlen(a); i++) { //记录每个数字出现了多少次。
        tmp[a[i]-'0']++;
    }
    if (strlen(b)<5) { // 非同花顺
        for (i=b[0]-'0'+1; i<10 && tmp[i]<strlen(b);i++);
        i==10?printf("NO"):printf("YES");
    } else { // 同花顺
        for (i=b[0]-'0'+1; i<6 && (tmp[i]*tmp[i+1]*tmp[i+2]*tmp[i+3]*tmp[i+4]==0); i++);
        i==6?printf("NO"):printf("YES");
    }
    return 0;
}


发表于 2021-12-17 21:09:38 回复(0)

问题信息

难度:
2条回答 7346浏览

热门推荐

通过挑战的用户

查看代码