题目描述
现在,有许多应用程序为了吸引用户访问,都有签到送积分的活动,若用户连续多天签到,应用程序会阶梯式地赠送更多的积分。
有一个应用程序的签到送积分的规则如下:
首先,每天登录将至少得到 1 分;
其次,若用户在前一天也登录了,当天得分为前一天得分加一分;
最后,每天得分的上限为 5 分。
给定一个字符序列 s,s 表示一个用户每天签到的情况,若某天签到,记为 Y,若某天没有签到,记为 N。请计算该用户能够获得的积分总数。
输入
一个字符序列:保证仅由大写字母 Y 和 N 组成。
输出
单个正整数,表示用户获得的积分之和。
样例输入
YYNYYYYYYNNNYYY
样例输出
29
提示
样例解释
第一段连续签到:1+2=3分
第二段连续签到:1+2+3+4+5+5=20分
第三段连续签到:1+2+3=6分
设 |s|表示字符序列的长度,有1≤∣s∣≤100000。
代码如下
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
int c;
int sum = 0;
cin >> s;
for (int i = 0; i < s.length(); i++)
{
if (s[i] == 'N')
{
c = 0;
}
else if (s[i] == 'Y' && c < 5)
{
c++;
sum = sum + c;
}
else if (c == 5)
{
sum = sum + 5;
}
}
cout << sum;
return 0;
}