华为2016校园招聘机试第三题

来源:互联网 发布:微信发卡机器人源码 编辑:程序博客网 时间:2024/05/08 23:45

扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):)
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如:4 4 4 4-joker JOKER
请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR

基本规则:
(1)输入每手牌可能是个子,对子,顺子(连续5张),三个,炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
(2)除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子)
(3)大小规则跟大家平时了解的常见规则相同,个子,对子,三个比较牌面大小;顺子比较最小牌大小;炸弹大于前面所有的牌,炸弹之间比较牌面大小;对王是最大的牌;
(4)输入的两手牌不会出现相等的情况。

答案提示:
(1)除了炸弹和对王之外,其他必须同类型比较。
(2)输入已经保证合法性,不用检查输入是否是合法的牌。
(3)输入的顺子已经经过从小到大排序,因此不用再排序了.

输入描述:
输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如4 4 4 4-joker JOKER。

输出描述:
输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。

输入例子:
4 4 4 4-joker JOKER

输出例子:
joker JOKER

我的代码

#include <stdio.h>#include <stdlib.h>#include <string.h>//获取扑克牌的张数unsigned int getnum(char *str){    int spacenum = 0;    char *p = str;    while(*p != '\0')    {        if(*p == ' ')        {            spacenum++;        }        p++;    }    return spacenum + 1;}//获取扑克牌的牌面int getcard(char *str){    char ch = *str;    int cardnum;    switch (ch)    {        case '3':            cardnum = 3;            break;        case '4':            cardnum = 4;            break;        case '5':            cardnum = 5;            break;        case '6':            cardnum = 6;            break;        case '7':            cardnum = 7;            break;        case '8':            cardnum = 8;            break;        case '9':            cardnum = 9;            break;        case '1':            cardnum = 10;            break;        case 'J':            cardnum = 11;            break;        case 'Q':            cardnum = 12;            break;        case 'K':            cardnum = 13;            break;        case 'A':            cardnum = 14;            break;        case '2':            cardnum = 15;            break;    }    return cardnum;}//拆分字符串void split(char *str, char *firstr, char *secstr){    char *p=str;    while(*p != '-')    {        p++;    }    *p='\0';    strcpy(secstr,++p);//对手二的牌    strcpy(firstr,str);//对手一的牌}void compare(char *card1, char *card2){    int card1num = getnum(card1);//获取第一个人牌的张数    int card2num = getnum(card2);//获取第二个人牌的张数    if(card1num == card2num)//牌的数目相等的情况    {        if(card1num == 2)//两张牌的情况        {            if(strlen(card1) == 11)//第一个人为王炸            {                printf("%s", card1);            }            else if(strlen(card2) == 11)//第二个人为王炸            {                printf("%s", card2);            }            else//两个人都是普通牌            {                if(getcard(card1) > getcard(card2))                {                    printf("%s",card1);                }                else                {                    printf("%s", card2);                }            }        }        else//3\4\5张牌的情况        {            if(getcard(card1) > getcard(card2))            {                printf("%s", card1);            }            else            {                printf("%s", card2);            }        }    }    else//牌的数目不相等的情况    {        if(card1num == 2 || card2num == 2)//其中一个人有两张牌        {            if(card1num == 2)//第一个人有两张牌            {                if(strlen(card1) == 11)//判断牌是否为大小王                {                    printf("%s", card1);                }                else//判断是否有炸                {                    if(card2num != 4)                    {                        printf("ERROR");                    }                    else                    {                        printf("%s",card2);                    }                }            }            if(card2num == 2)//第二个人有两张牌            {                if(strlen(card2) == 11)                {                    printf("%s", card2);                }                else//判断是否有炸                {                    if(card1num != 4)                    {                        printf("ERROR");                    }                    else                    {                        printf("%s",card1);                    }                }            }        }        else if(card1num == 4 || card2num == 4)//其中一个人有四张牌        {            if(card1num == 4)            {                printf("%s",card1);            }            else            {                printf("%s",card2);            }        }        else        {            printf("ERROR");        }    }}int main(){    char instr[30]={0};    char card1[15]={0};    char card2[15]={0};    gets(instr);//获取输入    split(instr, card1, card2);//切割字符串    compare(card1,card2);//比较大小    return 0;}
1 0
原创粉丝点击