NEUQACM OJ 1552: Your name

来源:互联网 发布:window10无法安装软件 编辑:程序博客网 时间:2024/05/16 03:35

这里写图片描述

点击看题(逃


由于是英文题,先让我们来分析一下题意
//由于翻译水平有限
以下为Google翻译结果:

最近,plyjdz被很多朋友问到了他的女朋友,但是plyjdz认为他没有。有一天,他在桌子上发现一张纸条,但是他不明白。可以告诉他note是什么意思?
输入:
你会得到一个字符串(长度<= 50)的注释。
*本说明包括“a“ - “z”,“A” - “Z”,数字和符号
输出:
如果注释中包含“pyd”,则应该告诉plyjdz“她的名字是pyd”
如果不是,你应该告诉plyjdz“你应该等待”
* pyd可能会被数字,’A’ - ‘Z’or符号分开。


目标:!找到pyd!当然这是有顺序的,不仅仅是简单的找到这三个字符哟
于是想到可以立下flag来标记
//以下为部分核心代码

        int len=st.size();        bool flag[3];//flag大法好        memset(flag,false,sizeof(flag));        for(int i=0;i<len;i++)        {            if(st[i]=='p'&&flag[0]==false)//第一次读取'p'立下flag[0]            {                flag[0]=true;            }            else if(st[i]=='y'&&flag[0]==true)//在读取'p'后第一次读取'y'            {                flag[1]=true;            }            else if(st[i]=='d'&&flag[0]==true&&flag[1]==true)//读取py后第一次读取'd'            {                flag[2]=true;            }        }

然鹅重点来了 我们的oj显示的是部分通过,也就是说似乎有特殊情况没有考虑到??
//让我们红橙作伴 活的潇潇洒洒(逃
再次看看题目,我们发现!!!pyd只会被数字,大写字母,符号分开
所以->pppyyyddd的输出结果应该是”You should wait”

于是经过思考,我们有了下面的解法
//虽然很暴力
核心思路:
找到输入字符串中的p,y,d三个字符并把它们按顺序赋给新的字符串newst,然后开始暴力循环
按顺序截取三个字符作为新的字符串,若截取后的字符串==“pyd”就说明实现了我们的目标啦
//用substr来实现
用法:字符串变量名.substr(开始位置,截取的字符串长度)

    for(int i=0;i<len2-2;i++)        {            //cout<<newst.substr(i,3)<<endl;            if(newst.substr(i,3)=="pyd")            {                flag=true;                cout<<"Her name is pyd"<<endl;            }        }