打牌

来源:互联网 发布:中山大学旅游学院 知乎 编辑:程序博客网 时间:2024/04/27 16:56

题目要求:

题目描述:

    牌只有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



代码:


int check(char* a,char* b);

void main()
{
    char a[100];//已经排好序的牌a
    char b[100];//对方出的牌

    while(scanf("%s",a)!=EOF){
        scanf("%s",b);
        if(check(a,b)==1) printf("YES\n");
        else printf("NO\n");

    }
    
}

 int check(char* a,char* b)
 {
     int i,j,count;
     char temp;
     if(strlen(b)==5){
         for(i=0;i<strlen(a);i++){
             if(a[i]>b[0]){
                 j=i+1;
                 temp=a[i]+1;
                 count=1;
                 while(a[j]!='\0'){
                     if(a[j]==temp){
                         temp=a[j]+1;
                         count++;
                         if(count==5) return 1;  //找到
                     }
                     if(a[j]>temp) return 0;  //没有
                     j++;
                 }
             }
         }//endfor
     }//endif

     else{
         count=strlen(b);
         for(i=0;i<strlen(a);i++){
             if(a[i]>b[0]){
                 if(a[i+count]==a[i]) return 1; //有序的a,只看移动固定长度是否还有那个值
             }
         }//endif
     }//endelse

     return 0;
 }

原创粉丝点击