扑克问题如何解决??

题面:
背景:两个人每人发3张牌(各从一副牌中),每张牌包括花色(红桃(Heart)>黑桃(Spade)>方块(Diamond)>梅花(Club))和大小(从小到大依次是:2-10、J、Q、K、A),谁手上有最大的一张或多张(如果有相同的牌)牌谁获胜。

输入:A的3张牌(未排序)和B的3张牌(未排序)。(参见用例)

输出:A的3张牌的排序后的输出和B的3张牌的排序后的输出,以及A和B谁获胜。(参见用例)

 测试输入    期待的输出    时间限制    内存限制    额外进程

测试用例 1 以文本方式显示
DA H2 C3↵
H4 H3 DJ↵
以文本方式显示
Winner is B!↵
A: H2 DA C3↵
B: H4 H3 DJ↵
无限制 64M 0
测试用例 3 以文本方式显示
HA CA CB↵
HQ CJ CQ↵
以文本方式显示
Input Error!↵
无限制 64M 0
测试用例 4 以文本方式显示
HA CA CJ↵
DA DK DK↵
以文本方式显示
Input Error!↵
无限制 64M 0
测试用例 5 以文本方式显示
SA SJ SK↵
SA SJ SK↵
以文本方式显示
Winner is X!↵
A: SA SK SJ↵
B: SA SK SJ↵
无限制 64M 0
问题:最后一个保密点过不去
附代码:

char a[3][3],b[3][3];      
#include      
#include      
main(){      
int trb[3]={1,1,1},tra[3]={1,1,1},flag=1,temp1,i,j,a1[3][2],b1[3][2];      
scanf("%s %s %s",a[0],a[1],a[2]);      
scanf("%s %s %s",b[0],b[1],b[2]);      
for(j=0;j<3;j++)      
 if(a[0][j]!=a[1][j])      
 tra[0]=0;      
for(j=0;j<3;j++)      
 if(a[0][j]!=a[2][j])      
 tra[1]=0;      
for(j=0;j<3;j++)      
 if(a[2][j]!=a[1][j])      
 tra[2]=0;      
for(j=0;j<3;j++)      
 if(b[2][j]!=b[1][j])      
 trb[0]=0;      
for(j=0;j<3;j++)      
 if(b[0][j]!=b[1][j])      
 trb[1]=0;      
for(j=0;j<3;j++)      
 if(b[0][j]!=b[2][j])      
 trb[2]=0;      
for(i=0;i<3;i++)      
if(tra[i]==1)      
{printf("Input Error!\n");return 0;}      
for(i=0;i<3;i++)      
if(trb[i]==1)      
{printf("Input Error!\n");return 0;}      
for(i=0;i<3;i++)      
{switch(a[i][0])      
{case'H':a1[i][0]=4;break;      
 case'S':a1[i][0]=3;break;       
 case'D':a1[i][0]=2;break;       
 case'C':a1[i][0]=1;break;       
 default:{printf("Input Error!\n");return 0;}       
}}      
for(i=0;i<3;i++)      
{switch(a[i][1])      
{case'A':a1[i][1]=14;break;      
 case'K':a1[i][1]=13;break;       
 case'Q':a1[i][1]=12;break;       
 case'J':a1[i][1]=11;break;       
 case'1':{ if(a[i][2]=='0') a1[i][1]=10;      
           else {printf("Input Error!\n");return 0;} }      
         break;      
 case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9': { if(a[i][2]=='\0') a1[i][1]=a[i][1]-'0';      
           else {printf("Input Error!\n");return 0;}}break;      
 default:{printf("Input Error!\n");return 0;}      
}}      
for(i=0;i<3;i++)      
{switch(b[i][0])      
{case'H':b1[i][0]=4;break;      
 case'S':b1[i][0]=3;break;       
 case'D':b1[i][0]=2;break;       
 case'C':b1[i][0]=1;break;       
 default:{printf("Input Error!\n");return 0;}      
}}      
for(i=0;i<3;i++)      
{switch(b[i][1])      
{case'A':b1[i][1]=14;break;      
 case'K':b1[i][1]=13;break;       
 case'Q':b1[i][1]=12;break;       
 case'J':b1[i][1]=11;break;       
 case'1':{ if(b[i][2]=='0') b1[i][1]=10;      
           else {printf("Input Error!\n");return 0;} }      
         break;      
 case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9': { if(b[i][2]=='\0') b1[i][1]=b[i][1]-'0';      
           else {printf("Input Error!\n");return 0;}}break;      
 default:{printf("Input Error!\n");return 0;}      
}}                                   
//输入参数,并判断输入是否合法       
for(i=0;i<2;i++)      
{for(j=0;j<2-i;j++)      
if(a1[j][0]<=a1[j+1][0])      
{temp1=a1[j][0];a1[j][0]=a1[j+1][0];a1[j+1][0]=temp1;temp1=a1[j][1];a1[j][1]=a1[j+1][1];a1[j+1][1]=temp1;}      
}      
for(i=0;i<2;i++)      
{for(j=0;j<2-i;j++)      
if(b1[j][0]<=b1[j+1][0])      
{temp1=b1[j][0];b1[j][0]=b1[j+1][0];b1[j+1][0]=temp1;temp1=b1[j][1];b1[j][1]=b1[j+1][1];b1[j+1][1]=temp1;}      
}      
if(a1[0][0]==a1[1][0]&&a1[1][0]==a1[2][0])      
{for(i=0;i<2;i++)      
{for(j=0;j<2-i;j++)      
if(a1[j][1]<=a1[j+1][1])      
{temp1=a1[j][1];a1[j][1]=a1[j+1][1];a1[j+1][1]=temp1;}      
}}       
else{for(i=0;i<2;i++)       
if(a1[i][0]==a1[i+1][0]&&a1[i][1]<=a1[i+1][1])      
{temp1=a1[i][1];a1[i][1]=a1[i+1][1];a1[i+1][1]=temp1;}      
}      
if(b1[0][0]==b1[1][0]&&b1[1][0]==b1[2][0])      
{for(i=0;i<2;i++)      
{for(j=0;j<2-i;j++)      
if(b1[j][1]<=b1[j+1][1])      
{temp1=b1[j][1];b1[j][1]=b1[j+1][1];b1[j+1][1]=temp1;}      
}}       
else{for(i=0;i<2;i++)       
if(b1[i][0]==b1[i+1][0]&&b1[i][1]<=b1[i+1][1])      
{temp1=b1[i][1];b1[i][1]=b1[i+1][1];b1[i+1][1]=temp1;}      
}                                  
 //排序       
for(i=0;i<3;i++)      
{for(j=0;j<2;j++)      
 if(a1[i][j]!=b1[i][j])      
 flag=0;      
}      
if(flag==1) printf("Winner is X!\n");      
if(flag==0)      
for(i=0;i<3;i++)      
{if(a1[i][0]>b1[i][0])      
{printf("Winner is A!\n");break;}      
else if(a1[i][0]0]){printf("Winner is B!\n");break;}      
     else{ if(a1[i][1]>b1[i][1])       
           {printf("Winner is A!\n");break;}      
           else  if(a1[i][1]1]){printf("Winner is B!\n");break;}      
         }      
}      
//比较       
printf("A:");      
for(i=0;i<3;i++)      
{printf(" ");      
switch(a1[i][0])      
{case 4:printf("H");break;      
 case 3:printf("S");break;       
 case 2:printf("D");break;       
 case 1:printf("C");break;       
}      
switch(a1[i][1])      
{case 14:printf("A");break;      
 case 13:printf("K");break;       
 case 12:printf("Q");break;       
 case 11:printf("J");break;       
 default:printf("%d",a1[i][1]);      
}}      
printf("\n");      
printf("B:");      
for(i=0;i<3;i++)      
{printf(" ");      
switch(b1[i][0])      
{case 4:printf("H");break;      
 case 3:printf("S");break;       
 case 2:printf("D");break;       
 case 1:printf("C");break;       
}      
switch(b1[i][1])      
{case 14:printf("A");break;      
 case 13:printf("K");break;       
 case 12:printf("Q");break;       
 case 11:printf("J");break;       
 default:printf("%d",b1[i][1]);      
}}      
printf("\n");      
return 0;      
}  

最后一个保密点过不去。 这句啥意思

以下内容部分参考ChatGPT模型:


这道题主要是考察对字符串的处理和排序算法的应用。可以按照以下思路来解决:

1.先读入两个人的牌,判断是否合法(是否有重复牌)。

2.将每张牌的花色和大小转换成数字,方便后续的排序和比较。

3.对每个人的三张牌进行排序,先按花色从大到小排序,如果花色相同则按大小从大到小排序。

4.比较两个人每张牌的大小,如果有一组牌比较大,则输出该人获胜;如果大小相同,则比较下一张牌,以此类推。

5.最后输出排好序的牌和获胜者。

以下是参考代码:

如果我的建议对您有帮助、请点击采纳、祝您生活愉快

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^