题目描述
牌只有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
输入
12233445566677
33
输出
YES
我用的是switch case语句,代码重复率太高了,不美观,但是能看懂 :)
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
char a[101];
char b[6];
int c[10];
memset(c,0,sizeof(c));
scanf("%s%s",a,b);
for(int i = 0;a[i] != 0;i++)
{
c[a[i] - '0']++;
}
int len = strlen(b);
bool f = false;
switch(len)
{
case 1:
for(int i = 1;i <= 9;i++)
{
if(c[i] > 0 && (b[0] - '0') < i)
{
printf("YES\n");
f = true;
break;
}
}
if(f == false)
printf("NO\n");
break;
case 2:
for(int i = 1;i <= 9;i++)
{
if(c[i] >= 2 && (b[0] - '0') < i)
{
printf("YES\n");
f = true;
break;
}
}
if(f == false)
printf("NO\n");
break;
case 3:
for(int i = 1;i <= 9;i++)
{
if(c[i] >= 3 && (b[0] - '0') < i)
{
printf("YES\n");
f = true;
break;
}
}
if(f == false)
printf("NO\n");
break;
case 4:
for(int i = 1;i <= 9;i++)
{
if(c[i] >= 4 && (b[0] - '0') < i)
{
printf("YES\n");
f = true;
break;
}
}
if(f == false)
printf("NO\n");
break;
case 5:
int num = 0;
for(int i = 1;i <= 9;i++)
{
if(c[i] >= 1 && (b[0] - '0') < i)
{
num++;
if(num >= 5)
{
printf("YES\n");
f = true;
break;
}
}
else
num = 0;
}
if(f == false)
printf("NO\n");
break;
}
return 0;
}
下面是我偷看别人的代码,我发现经常看那些大佬写代码能学到不少东西呢
#include <cstdio>
#include <cstring>
#include <memory>
const int N = 100;
int main()
{
char a[N], b[6];
int num[10];
while (scanf("%s%s", a, b) != EOF)
{
memset(num, 0, sizeof(num));
int len_a = strlen(a);
int len_b = strlen(b);
bool flag = false;
for (int i = 0; i < len_a; i++)
{
num[a[i] - '0']++;
}
if (len_b < 5)
{
for (int i = b[0] - '0' + 1; i < 10; i++)
{
if (num[i] >= len_b)
{
flag = true;
break;
}
}
}
else
{
for (int i = b[0] - '0' + 1; i < 6; i++)
{
if (num[i] > 0 && num[i + 1] > 0 && num[i + 2] > 0
&& num[i + 3] > 0 && num[i + 4] > 0)
{
flag = true;
break;
}
}
}
if (flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}