华为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;}
- 华为2016校园招聘机试第三题
- 2014华为校园招聘 机试 第三题
- 2014华为招聘机试第三题
- 2011华为校园招聘重庆试题第三题
- 2015华为校园招聘机试模拟题及解答
- 2014华为校园招聘机试
- 华为2014校园招聘机试
- 华为机试 2014校园招聘
- 华为2014校园招聘合肥机试
- 华为2014校园招聘机试3
- 2015华为校园招聘 机试总结
- 华为2015校园招聘机试
- 华为校园招聘java机试整理
- 2016届华为校园招聘机试题
- 华为2016校园招聘上机笔试题
- 华为2016校园招聘笔试题
- 华为2016校园招聘上机笔试题
- 华为2016校园招聘上机笔试题
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- java中Token验证
- android JNI 开发
- HTML-列表
- scala语言入门
- 华为2016校园招聘机试第三题
- Android Studio: Gradle DSL method not found: 'android()
- Multi-Label Learning(一)之A Review on Multi-Label Learning Algorithms
- Java基础知识点
- Activity使用Dialog样式导致点击空白处自动关闭的问题
- Cocos2D-X学习5:在屏幕上显示文字内容
- 自定义数字时钟DigitalClockView
- 剑指Offer面试题66:矩阵中的路径 java实现
- 3-1 Point类的构造函数