题解 | #扑克牌大小#
扑克牌大小
http://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb
/*
*这个程序依然有很多的冗余
*优化的空间还很大
*由于是纯C写的所以比较麻烦
*/
include<stdio.h>
include<stdlib.h>
include<string.h>
include
include
using namespace std;
char max(char p)
{
char *str = p;
if(str == NULL)
return 0;
int len = strlen(str);
char *str3 = (char)malloc(len);
char *str4 = p;
int len_b = 0;
int i=0;
//提前取出两副牌,这里的牌是没有换算的牌
int len_a = 0;
char *str6 = p;
while(*str6 != '-')
{
len_a++;
str6++;
}
char *str11 = (char*)malloc(len_a);
char *str22 = (char*)malloc(len - 1 -len_a);
strncpy(str11,str,len_a);
strncpy(str22,str+len_a+1,len-1-len_a);
//将10 换成A。
//同时还需要将A换成Y 2换成Z
i = 0;
int len_d = len;
while(len_d--)
{
if('0' != *str4)
{
if('1' == *str4)
{
str3[i++] = 'A';
}
else if('A' == *str4)
str3[i++] = 'Y';
else if('2' == *str4)
str3[i++] = 'Z';
else
str3[i++] = *str4;
}
str4++;
}
//printf("%s \n",str3);
str3[i] = '\0';
strcpy(str,str3);
free(str3);
len_a = 0;
char *str5 = p;
//算出两个分组的长度
while(*str5 != '-')
{
len_a++;
str5++;
}
//如果是对王
if(('j' == str[0] && 'o' == str[1])||('E' == str[len-2] && 'R' == str[len-1]))
{
printf("joker JOKER");
return 0;
}
//分别取出两个组的牌
len = strlen(str);
char *str1 = (char*)malloc(len_a);
char *str2 = (char*)malloc(len - 1 -len_a);
strncpy(str1,str,len_a);
strncpy(str2,str+len_a+1,len-1-len_a);
//如果牌数不一样,
if(len_a != len-1-len_a)
{
//判断是否有炸弹
if(7 == len_a)
{
printf("%s",str11);
return 0;
}else if(7 == len - len_a-1)
{
printf("%s",str22);
return 0;
}
printf("ERROR");
return -1;
}
//长度一样比较大小
else
{
if(str1[0] > str[len_a+1])
{
printf("%s",str11);
}
else
{
printf("%s",str22);
}
}
free(str1);
free(str2);
free(str11);
free(str22);
return 0;}
int main()
{
char str = (char)malloc(54*4);
int i = 0;
cin.getline(str,54*4); max(str); free(str1); return 0;
}
查看14道真题和解析
