{
if(m<=n) flag=0;
}
else if(s1[2]!=ch&&s2[2]==ch)
flag=0;
else if(s1[2]!=ch&&s2[2]!=ch)
{
if(m<=n) flag=0;
}
}
else if(len1==3&&len2==2)
{
if(s1[2]==ch&&s2[1]==ch)
{
if(m<=n) flag=0;
}
else if(s1[2]!=ch&&s2[1]==ch)
flag=0;
else if(s1[2]!=ch&&s2[1]!=ch)
{
if(m<=n) flag=0;
}
}
else if(len1==2&&len2==3)
{
if(s1[1]==ch&&s2[2]==ch)
{
if(m<=n) flag=0;
}
else if(s1[1]!=ch&&s2[2]==ch)
flag=0;
else if(s1[1]!=ch&&s2[2]!=ch)
{
if(m<=n) flag=0;
}
}
else if(len1==2&&len2==2)
{
if(s1[1]==ch&&s2[1]==ch)
{
if(m<=n) flag=0;
}
else if(s1[1]!=ch&&s2[1]==ch)
flag=0;
else if(s1[1]!=ch&&s2[1]!=ch)
{
if(m<=n) flag=0;
}
}
if(flag) printf("YES\n");
else printf("NO\n");
getchar();
}
return 0;
}
写完以后觉得可以把这段代码简化一下,因为里面有很多一样的部分,即使不一样,思想也是一样的,比如把牌号转化为十进制数字时可以写一个函数,判断花色时只需判断s1[len1-1]和s2[len2-1]即可,没有必要分开写,简化以后代码几乎缩短了一半。
简化后代码:
[cpp] #include
#include
int n,t,m,len1,len2;
char s1[5],s2[5],ch;
int find(char *s,int len)/*把牌号转化为十进制数字*/
{
int k;
if(len==3) k=10; /*长度为3,牌号肯定是10*/
else if(len==2)
{
if(s[0]>='2'&&s[0]<='9')
k=s[0]-'0';
else if(s[0]=='A') k=1;
else if(s[0]=='J') k=11;
else if(s[0]=='Q') k=12;
else if(s[0]=='K') k=13;
}
return k;
int main()
{
scanf("%d",&t);
getchar();
while(t--)
{
scanf("%c",&ch); /*王牌花色*/
getchar();
scanf("%s %s",s1,s2);
len1=strlen(s1);
len2=strlen(s2);
m=find(s1,len1);
n=find(s2,len2);
int flag=1;
if(s1[len1-1]==ch&&s2[len2-1]==ch) /*两张牌都是王牌花色*/
{
if(m<=n) flag=0;
} /*注意这个大括号不能少*/
else if(s1[len1-1]!=ch&&s2[len2-1]==ch) /*第一张不是,第二张是王牌花色*/
flag=0;
else if(s1[len1-1]!=ch&&s2[len2-1]!=ch) /*都不是王牌花色*/
{
if(m<=n) flag=0;
}
if(flag) printf("YES\n");
else printf("NO\n");
getchar();
}
return 0;
}
#include
#include
int n,t,m,len1,len2;
char s1[5],s2[5],ch;
int find(char *s,int len)/*把牌号转化为十进制数字*/
{
int k;
if(len==3) k=10; /*长度为3,牌号肯定是10*/
else if(len==2)
{
if(s[0]>='2'&&s[0]<='9')
k=s[0]-'0';
else if(s[0]=='A') k=1;
else if(s[0]=='J') k=11;
else if(s[0]=='Q') k=12;
else if(s[0]=='K') k=13;
}
return k;
}
int main()
{
scanf("%d",&t);
getchar();
while(t--)
{
scanf("%c",&ch); /*王牌花色*/
getchar();
scanf("%s %s",s1,s2);
len1=strlen(s1);
len2=strlen(s2);
m=find(s1,len1);
n=find(s2,len2);
int flag=1;
if(s1[len1-1]==ch&&s2[len2-1]==ch) /*两张牌都是王牌花色*/
{
if(m<=n) flag=0;
} /*注意这个大括号不能少*/
else if(s1[len1-1]!=ch&&s2[len2-1]==ch) /*第一张不是,第二张是王牌花色*/
flag=0;
else if(s1[len1-1]!=ch&&s2[len2-1]!=ch) /*都不是王牌花色*/
{
if(m<=n) flag=0;
}
if(flag) printf("YES\n");
else printf("N