此题为2010年北邮复试网研院上机测试第三题,参考他人了的,至于第四题,鄙人没做出来,抱歉了哈,附上北邮旧版OnlineJudge网址:http://boj.me/onlinejudge/index.php
第三题:打牌 Problem Id: 1820Submit time: 2011-03-29 19:11:52User_id: wwp007565Memory:64K Time:14MSLanguage:G++ Result:Accepted
牌只有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<string.h>
int main()
{
char str1[100],str2[5];
// char ch;
int i=0,j=0;
int count[10]={0};
int s1,s2,s3,s4,s5;
int len,flag=1;
int len2;
scanf("%s",str1);
scanf("%s",str2);
len = strlen(str2);
len2 = strlen(str1);
// str1[len2] = '\0';
// str2[len] = '\0';
for(i=0;i<strlen(str1);i++)
{
if((str1[i]-'1')==0) count[0]++;
else if((str1[i]-'1')==1) count[1]++;
else if((str1[i]-'1')==2) count[2]++;
else if((str1[i]-'1')==3) count[3]++;
else if((str1[i]-'1')==4) count[4]++;
else if((str1[i]-'1')==5) count[5]++;
else if((str1[i]-'1')==6) count[6]++;
else if((str1[i]-'1')==7) count[7]++;
else if((str1[i]-'1')==8) count[8]++;
else break;
}
// for(i=0;i<9;i++)
// printf("%d\n",count[i]);
if(len ==1)
{
j = 0;
s1=*str2-'1';
for(j=s1+1;j<9;j++)
if(count[j]>0)
{ printf("YES\n");flag =0;break;}
}
else if(len==2)
{
j = 0;
s2=*str2-'1';
for(j=s2+1;j<9;j++)
if(count[j]>1)
{ printf("YES\n");flag =0;break;}
}
else if(len==3)
{
j=0;
s3=*str2-'1';
for(j=s3+1;j<9;j++)
if(count[j]>2)
{ printf("YES\n");flag =0;break;}
}
else if(len==4)
{
j = 0;
s4=*str2-'1';
for(j=s4+1;j<9;j++)
if(count[j]>3)
{ printf("YES\n");flag =0;break;}
}
else if(len==5)
{
s5=*str2-'1';
for(;s5<9;s5++)
if(count[s5+1]>0 && count[s5+2]>0 && count[s5+3]>0 && count[s5+4]>0 && count[s5+5]>0 && count[s5+5]<=9)
{printf("YES\n");flag =0;break;}
}
if(flag==1)
printf("NO\n");
return 0;
}