题解 P5015 标题统计 NOIP2018普及组复赛第一题
AutumnTripod906 · · 题解
NOIP2018普及组复赛第一题
P5015标题统计
先吐槽一下,这题的难度和后面的几题完全不在一个频道上啊啊啊
NOIP出题人良心发现?
应该是OIer们rp++溢出了吧(真理)
好了,步入正题
字符串
因为涉及到字符串,所以先介绍一下字符串。
字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s=“a1a2···an”(n>=0)。它是编程语言中表示文本的数据类型。在程序设计中,字符串(string)为符号或数值的一个连续序列,如符号串(一串字符)或二进制数字串(一串二进制数字)。 通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。
说简单一些,就是字符组成的数组(或串)
详见你的编程入门书
代码&讲解
过程做法
字符数组法
#include<cstdio>
#include<cstring>
using namespace std;
char s[101]; //定义字符数组以存储凯凯的作文
int main()
{
gets(s); //输入作文
int l=strlen(s),anslen=0; //len存储作文的长度,anslen当计数器,统计符合题意的字符的个数
for(int i=0;i<l;++i) //逐个枚举,判断这个作文的标题的这个元素是否符合题意
{
if(s[i]!=' '&&s[i]!='\n') //如果不是空格或换行
++anslen; //那么答案+1
}
printf("%d",anslen); //输出答案
return 0; //结束程序
}
递归做法
#include<iostream>
#include<string>
using namespace std;
string s; //存储凯凯那美妙的作文
int len,ans;
int search(int i) //寻找作文的标题中有多少个字符
{
if(i==len) return ans; //递归出口,如果找到尽头就结束,返回main()
if(s[i]!=' '&&s[i]!='\n') //如果不是空格或换行
ans++; //那么答案+1
return search(i+1); //进入下一个元素的判断
}
int main()
{
ios::sync_with_stdio(0); //给iostream加速
getline(cin,s); //输入作文
len=s.length(); //获取凯凯的作文的长度
cout<<search(0); //输出答案
return 0;
}