题目要求:
题目描述:
牌只有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;
}