题解 | #扑克牌大小#
扑克牌大小
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;
}