题目背景

现在,有许多应用程序为了吸引用户访问,都有签到送积分的活动,若用户连续多天签到,应用程序会阶梯式地赠送更多的积分。

题目描述

有一个应用程序的签到送积分的规则如下:

首先,每天登录将至少得到 1 分;
其次,若用户在前一天也登录了,当天得分为前一天得分加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。

解析:本题只要简单模拟就好,设一个变量s表示当天得到的积分数量,ans每次+=s即可。

注意事项: 1.每次签到最多得到5积分,所以ans要+=min(5,s)

                  2.当没有签到(a[i]=='N')时,s要清零

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a;
    int ans=0,s=0;
    cin >> a;
    for(int i=0;i<a.size();i++)
    {
        if(a[i]=='Y')
        {
            s++;
            ans+=min(5,s);
        }
        else
        {
            s=0;
        }
    }
    cout<<ans;
    return 0;
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐