单词覆盖还原
题目描述
一个长度为
l
l
l 的字符串中被反复贴有 boy
和 girl
两单词,后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没有被覆盖。问贴有几个 boy
几个 girl
?
输入格式
一行被反复贴有 boy
和 girl
两单词的字符串。
输出格式
两行,两个整数。第一行为 boy
的个数,第二行为 girl
的个数。
样例 #1
样例输入 #1
......boyogirlyy......girl.......
样例输出 #1
4
2
提示
数据保证, 3 ≤ l ≤ 255 3\le l\le255 3≤l≤255,字符串仅仅包含如下字符: .bgilory \texttt{.bgilory} .bgilory。
分析:
一开始我就想要分类讨论,直接使用if语句,但所需分的类别太多。
我们不妨先考虑boy:
有七种情况‘b’ ‘o’ ‘y’ ‘bo’ ‘by’ ‘oy’ ‘boy’,
我们并不需要一一列举,因为它们均由‘boy’变化而来。
我们可以想到||运算符,利用或运算符可以把‘boy’拆为上面7中情形。
‘gril’同理
#include<stdio.h>
#include<string.h>
char a[300];
int main()
{
int i, anum = 0, bnum = 0, m;
gets(a);
m = strlen(a);//获取字符串
for (i = 0; i < m; i++)
{
if (a[i] == 'b' || a[i + 1] == 'o' || a[i + 2] == 'y')
anum++;//这段逻辑包含了上述7种情形
if (a[i] == 'g' || a[1] == 'i' || a[i + 2] == 'r' || a[i + 3] == 'l')
bnum++;
}
printf("%d\n%d", anum, bnum);
return 0;
}
总结:分类讨论不一定要使用if语句,还可以使用||运算符