打牌

牌只有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五个,后面的比前面的均大
 
压过输出YES 否则NO
 
如(括号内容为注释)
输入:
12233445566677(手中牌)
33(出牌)
 
输出:
YES

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(){
    int i,len,lenb,flag;
    char card[1000],b[1000];
    int count[10];
    
    while(scanf("%s %s",card,b) != EOF){
        if(strlen(b) > 5){
            scanf("出牌情况只有5种,请重新输入:%s",b);
        }
        
        flag = 0;
        memset(count, 0, sizeof(count));//复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符,这里是初始化count全为0 
        len = strlen(card);
        lenb = strlen(b);
        
        //统计牌各点的数量
        for(i = 0; i < len; i++){
            count[card[i]-'0']++;
        } 
         
        //前4种牌
        if(lenb<5){
            for(i = b[0]-'0'+1; i < 10; i++){
                if(count[i] >= lenb){
                    flag = 1;
                    break;
                }
            }
        }
        
        //第五种牌
        else if(lenb == 5){
            for(i = b[0] - '0' +1; i < 6; i++){
                if(count[i] > 0 && count[i+1] > 0 && count[i+2] >0 && count[i+3] >0 && count[i+4] >0){
                    flag = 1;
                    break;
                }
            }
        }
        
        if(flag == 0){
            printf("NO
");
        }
        else{
            printf("YES
");
        }
      
    }
    return 0; 
}
原文地址:https://www.cnblogs.com/xym4869/p/8657655.html