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