1. 程式人生 > >NOIP2018普及T1暨洛谷P5015 標題統計 題解

NOIP2018普及T1暨洛谷P5015 標題統計 題解

分析:

這道題大概是給個簽到分吧。很顯然的字串操作。本篇題解主要幫助初學者,請大佬略過。

首先給大家介紹一個叫

gets(s)gets(s)

的東東。

s☞字串的名稱

他有什麼作用呢?

將一行字元從檔案或螢幕中讀入,可以讀空格,遇到換行跳出。 —— by 本人

此題也明顯告訴是讀入僅一行,我們可以這麼做。

哇!我們現在可以在計算機裡進行操作了耶!

在這裡告訴大家noip很重要的一點,讀完題要看資料範圍。

為什麼呢?因為我們可以理解題目後預估自己的水平後,結合資料範圍估計一下自己大概往多少分的目標去。

扯回正題,那麼我們如何知道他給了我們幾個字元呢?我們之前一起讀了進去,這咋辦呢?

再介紹一個東東——

strlen(s)strlen(s)

這裡的n指字串的名稱。

我們在程式碼中進行如下操作

int n=strlen(s);

就能把n記為s串的長度了。

接下來我們看到資料範圍:

1<=s<=51<=∣s∣<=5

可以窮舉一遍!

我們在程式中進行如下操作:

for(int i=0;i<n;i++)
{
	//do something
}

然後,我們再採用if語句判斷即可。

40分:

if(s[i]>='0'&&s[i]<='9')
		ans++;

80分:

我暫時都不清楚80分是咋得的。。。

100分:

if(s[i]>='A'&&s[i]<='Z')
ans++;
if(s[i]>='a'&&s[i]<='z')
ans++;
if(s[i]>='0'&&s[i]<='9')
ans++;

AC完整程式碼:

#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
	char s[10];
	gets(s);
	int n=strlen(s);
	int ans=0;
	for(int i=0;i<n;i++)
	{
		if(s[i]>='A'&&s[i]<='Z')
		ans++;
		if(s[i]>='a'&&s[i]<='z')
		ans++;
		if(s[i]>='0'&&s[i]<='9')
		ans++;
	}
	printf("%d",ans);
	return 0;
}