|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
牌只有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。
例如:
输入:
输出:
我的想法是分为两种情况,第一种是1-4张牌,直接由手牌判断。第二种是先将手牌中的重复的牌删去,再判断是否有大过b的牌。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void exchange(char*, int, char*);//将手牌里的重复的牌删掉
- int main()
- {
- char sp[110] = {0};
- char b[5] = {0};
- while(~scanf("%s", sp))
- {
- char tp[110] = {0};
- int length = strlen(sp);
- scanf("%s", b);
- int len = strlen(b);
- int i = 0;
- int temp = 0;//temp=1表示可以出牌
- char ch = b[0];
- if(len == 5) exchange(sp, length, tp); //len=5的情况另外讨论,将所有重复手牌删去
- while(i < length)
- {
- if(len == 1)
- {
- if(ch < sp[i])
- temp = 1;
- }
- else if(len == 2)
- {
- if(ch < sp[i] && (sp[i] == sp[i+1]))
- temp = 1;
- }
- else if(len == 3)
- {
- if(ch < sp[i] && (sp[i] == sp[i+1]) && (sp[i] == sp[i+2]))
- temp = 1;
- }
- else if(len == 4)
- {
- if(ch < sp[i] && (sp[i] == sp[i+1]) && (sp[i] == sp[i+2]) && (sp[i] == sp[i+3]))
- temp = 1;
- }
- i++;
- }
- int lens = strlen(tp);
- if(len == 5)
- {
- i = 0;
- while(i < lens)
- {
- if(ch < tp[i] && (tp[i+1] - tp[i] == 1) && (tp[i+2] - tp[i] == 2) && (tp[i+3] - tp[i] == 3) && (tp[i+4] - tp[i] == 4))
- temp = 1;
- i++;
- }
- }
- if(temp == 1)
- printf("YES\n");
- else
- printf("NO\n");
- }
- }
- void exchange(char ch[], int len, char temp[])
- {
- int i, j = 1;
- temp[0] = ch[0];
- for(i = 1; i < len; i++)
- {
- if(ch[i] != ch[i-1])
- {
- temp[j] = ch[i];
- j++;
- }
- }
- }
复制代码
|
|