OR44. 扑克牌大小
描述
扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):)输入描述
输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如4 4 4 4-joker JOKER。输出描述
输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。示例1
输入:
4 4 4 4-joker JOKER
输出:
joker JOKER
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-08-14
#include <stdio.h> #include <stdlib.h> #include <string.h> int *infoCard(char *a) { int *info = (int*)calloc(2, sizeof(int)); if(*a == 'j'){ info[0] = 6; return info; } switch(*a){ case '1': info[1] = 10; break; case 'A': info[1] = 14; break; case '2': info[1] = 15; break; case 'J': info[1] = 11; break; case 'Q': info[1] = 12; break; case 'K': info[1] = 13; break; default: info[1] = *a-'0'; } while(*a) if(*(a++) == ' ') ++info[0]; ++info[0]; return info; } int main(int argc, char const *argv[]) { char a[64], b[64]; scanf("%[^-]-%[^\n]", a, b); int *ai = infoCard(a), *bi = infoCard(b); if(ai[0] == 6) printf("%s\n", a); else if(bi[0] == 6) printf("%s\n", b); else if(ai[0] == bi[0]) printf("%s\n", ai[1] > bi[1] ? a : b); else if(ai[0] == 4) printf("%s\n", a); else if(bi[0] == 4) printf("%s\n", b); else printf("ERROR\n"); free(ai); free(bi); return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-07-14
#include <stdio.h> #include <stdlib.h> /** info[0]代表扑克牌的类型,info[1]代表同类型的大小 info[0]=1代表单张,=2代表两张,=3代表三张,=4代表炸弹,=5代表顺子,=6代表王炸 */ int *InfoCarf(char *a) { int *info=(int *)calloc(2,sizeof(int));//calloc后内存空间数据初始化为0,返回大小为2的数组 if(*a=='j') { info[0]=6; return info; } switch(*a) { case '1':info[1]=10;break; case 'J':info[1]=11;break; case 'Q':info[1]=12;break; case 'K':info[1]=13;break; case 'A':info[1]=14;break; case '2':info[1]=15;break; default: info[1]=*a-'0'; } while(*a) { if(*(a++)==' ')//牌的张数等于空格数加一,若没有空格则为单张 info[0]++; } info[0]++; return info; } int main() { char a[64],b[64];//输入字符串前要给它分配空间 scanf("%[^-]-%[^\n]",a,b); int *info1=InfoCarf(a); int *info2=InfoCarf(b); if(info1[0]==6) printf("%s\n",a); else if(info2[0]==6) printf("%s\n",b); else if(info1[0]==info2[0]) printf("%s\n",info1[1]>info2[1]?a:b); else if(info1[0]==4)//炸弹可以跟其他类型比较 printf("%s\n",a); else if(info2[0]==4) printf("%s\n",b); else printf("ERROR"); return 0; }