2021年北京化工大学女生赛-问题 I: 我只会心疼哥哥-题解

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021年北京化工大学女生赛-问题 I: 我只会心疼哥哥-题解相关的知识,希望对你有一定的参考价值。


我只会心疼哥哥

传送门

时间限制:1秒
空间限制:128M


题目描述

哥哥在生活中经常扮演者保护妹妹的角色。有的“好”妹妹懂得心疼哥哥。但是心疼哥哥的前提是拥有哥哥。

这是一些常见的亲戚关系中英文对应表:

中文英文
哥哥elder brother
姐姐elder sister
弟弟younger brother
妹妹younger sister
爸爸妈妈parents
爷爷奶奶grandparents
儿子son
女儿daughter
爸爸的哥哥father’s elder brother

当然还有很多其他的称谓,但是保证本题只会出现这些称谓。


输入描述

给你一行一个字符串(长度 ≤ 5000 \\leq 5000 5000),是小T的亲戚关系。

每个亲戚之间,用一个逗号和一个空格隔开。

例如:小T有一个哥哥和一个姐姐,输入为:elder brother, elder sister


输出描述

如果小T拥有哥哥(输入中含有“elder brother”),那么请输出I can do nothing but to 'Xin Teng Gie Gie',否则请输出I have no elder brother ~_~


样例一

输入

elder brother, elder sister, younger brother, younger sister, younger sister, parents, grandparents, son, daughter

输出

I can do nothing but to 'Xin Teng Gie Gie'

说明

第一位亲戚即为“哥哥”,所以小T拥有哥哥。


样例二

输入

elder sister, younger brother

输出

I have no elder brother ~_~

说明

小T只有姐姐和弟弟,所以小T没有哥哥



题目分析

这题就判断输入的字符串中是否含有’ e l d e r   b r o t h e r elder\\ brother elder brother'就行了。
提供两种语言的思路:

第一种:C语言

因为可能有多个亲戚,所以定义两个变量 l e f t left left r i g h t right right,分别代表其中一个亲戚的开始下标和结束下标,然后对于这位亲戚,看是不是 e l d e r   b r o t h e r elder\\ brother elder brother

对于这位亲戚,先看第一个字符是不是空格。如果是,就把这位亲戚的起始下标后移一位。

然后看长度是否正好是 e l d e r   b r o t h e r elder\\ brother elder brother 的长度(13).如果是13,就逐个比较是不是 e l d e r   b r o t h e r elder\\ brother elder brother 即可。
只要含有 e l d e r   b r o t h e r elder\\ brother elder brother ,就说明拥有哥哥。

第二种:Python

Python中自带split,可以先以逗号+空格为分隔,得到每一位亲戚的名称,然后之间判断是否正好为 e l d e r   b r o t h e r elder\\ brother elder brother 就行了。

注意事项

  • 这道题哥哥亲戚的分隔是逗号+空格,而第一位亲戚前面是没有空格的,这一点需要注意。
  • 注意题目关系表中不只有 e l d e r   b r o t h e r elder\\ brother elder brother,还有 f a t h e r ′ s   e l d e r   b r o t h e r father's\\ elder\\ brother fathers elder brother,所以不能仅看字符串中是否存在 e l d e r   b r o t h e r elder\\ brother elder brother

AC代码

C语言

MinGW gcc可编译通过

#include<stdio.h>
#include<string.h>
char ori[5010];  // 用来存放输入字符串的数组
const char GeGe[]={"elder brother"};  // 这个字符串是“哥哥”
int isGeGe(char c[],int l,int r)  // 判断这位亲戚是不是“哥哥”。如果是,就返回1,不是返回0(C语言不带bool)
{
    if(c[l]==' ')l++;  // 如果这位亲戚的第一位是空格,起始位置后移一位
    if(r-l+1!=13)return 0;  // 如果这位亲戚的长度不为13,肯定不是“哥哥”
    int i;  // 这位亲戚名称的第i位
    for(i=0;i<13;i++)  // 从0到13逐个比较,看是不是和“哥哥相同”
        if(c[l+i]!=GeGe[i])  // 有一个不同直接pass
            return 0;  // 返回0
    return 1;  // 全部相同返回1
}
int main()
{
    gets(ori);  // 输入原始字符串。因可能存在空格,故不能使用scanf
    int l=strlen(ori);  // 字符串长度
    ori[l]=',',ori[l+1]='\\0';  // 为了方便,把字符串最后一位置为“,”
    int left=0;  // 每位亲戚的开始下标,初始值是0
    int have=0;  // 是否有哥哥。0代表没有
    int right;  // 每位亲戚的结束下标
    for(right=1;right<=l;right++)  // 从1到l
    {
        if(ori[right]==',')  // 这一位是逗号,说明到了一位亲戚名称的结尾
        {
            have|=isGeGe(ori,left,right-1);  // 0 | 0 = 0,  0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1。|=操作不会把have由1变成0,但能使其由0变成1
            left=right+1;  // 下一位亲戚的起始下标是逗号的下一位
        }
    }
    puts(have?"I can do nothing but to 'Xin Teng Gie Gie'":"I have no elder brother ~_~");  // puts: 有哥哥吗 ? 如果由,输出“心疼哥哥”  : 如果没,输出“没有哥哥”
    return 0;  // 返回结束
}

Python

小心超时

ori = input().split(', ')
for i in ori:
    if i == 'elder brother':
        print("I can do nothing but to 'Xin Teng Gie Gie'")
        exit(0)
print("I have no elder brother ~_~")

原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/117339731

以上是关于2021年北京化工大学女生赛-问题 I: 我只会心疼哥哥-题解的主要内容,如果未能解决你的问题,请参考以下文章

2021年浙江理工大学新生赛同步赛

北京化工大学第17届程序设计竞赛 - 女生赛 - 2022.08.28 - 问题 B:谁是今天的女王

北京化工大学第17届程序设计竞赛 - 女生赛 - 2022.08.28 - 问题 A: You love JSON. Aren‘t you?

Hihocoder1388 2016年北京网络赛 FFT

2021-2022年度第三届全国大学生算法设计与编程挑战赛(冬季赛)-正式赛 部分题解

2019CCPC女生赛小菜鸡打铜记