2010北邮复试网研上机题——打牌
2011-12-15 20:57
447 查看
起因:
最近利用空余时间也练习了将近一个月的acm,重新回来看这篇当时的博客,发现代码错误百出,在九度OJ上重新ac了这道题,上代码给大家看题目要求:
题目描述:
牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌。规则:出牌牌型有5种
[1]一张 如4 则5...9可压过
[2]两张 如44 则55,66,77,...,99可压过
[3]三张 如444 规则如[2]
[4]四张 如4444 规则如[2]
[5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大。
输入:
输入有多组数据。每组输入两个字符串(字符串大小不超过100)a,b。a字符串代表手中牌,b字符串代表处的牌。
输出:
压过输出YES 否则NO。样例输入:
12233445566677 33
样例输出:
YES
注意事项:
开始提交了3次,都是wa,发现有一种测试用例我无法通过,也是上个代码错误的地方,测试用例如下:样例输入:1122335566778899(不连续)12345
样例输出:yes
AC代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char a[101]; char b[101]; char ch, key; int i, lena, lenb, flag; int count[11]; while(scanf("%s",a) != EOF) { //接收回车符 ch = getchar(); //接收出牌 scanf("%s",b); ch = getchar(); //长度 lena = strlen(a); lenb = strlen(b); //初始化 memset(count,0,sizeof(count)); //遍历手牌 for(i = 0; i < lena; i ++) { count[a[i] - '0'] ++; } //检测对方出牌 switch(lenb) { case 1: case 2: case 3: case 4: flag = 0; for(key = b[0] - '0' + 1; key <= 9; key ++) { if(count[key] >= lenb) { flag = 1; break; } } break; case 5: flag = 0; for(key = b[0] - '0' + 1; key < 9; key ++) { if(count[key] > 0 && count[key + 1] > 0 && count[key + 2] > 0 && count[key + 3] > 0 && count[key + 4] > 0) { flag = 1; break; } } break; } //打印输出 if(flag) { printf("YES\n"); }else { printf("NO\n"); } } return 0; }
相关文章推荐
- 2010北邮复试网研上机题——打牌
- 2010北邮复试上机网研的题目:(1)
- 2010北邮复试上机网研题目A
- 2010北邮复试上机网研题目B
- 2010北邮复试网研上机题
- 2010北邮复试上机网研题目C
- 2010北邮复试网研上机题
- 浙大计算机研究生复试上机考试(2010)——二叉搜索树(hdu3791)
- 北航研究生复试2010上机第三题:数组是否相同
- ZOJ问题(2010浙江大学研究生复试上机题目[找规律] hdoj 3788)
- 华中科技大学_2010___考研计算机_复试上机
- 北邮考研复试C语言上机题目精选
- 2010浙大上机复试解题报告
- 北邮2011网研复试上机题——复数集合
- 2010北邮上机真题——哈夫曼树
- 北邮2012年复试上机题目
- 北邮2011网研复试上机题——复数集合
- 2010北邮上机真题——哈夫曼树
- 【北邮复试机试】打牌
- 北邮2012年复试上机题目