签到积分c++/c语言代码+解析
现在,有许多应用程序为了吸引用户访问,都有签到送积分的活动,若用户连续多天签到,应用程序会阶梯式地赠送更多的积分。解析:本题只要简单模拟就好,设一个变量s表示当天得到的积分数量,ans每次+=s即可。给定一个字符序列 s,s 表示一个用户每天签到的情况,若某天签到,记为。设 ∣s∣ 表示字符序列的长度,有 1≤∣s∣≤100000。其次,若用户在前一天也登录了,当天得分为前一天得分加1分;注意事项
题目背景
现在,有许多应用程序为了吸引用户访问,都有签到送积分的活动,若用户连续多天签到,应用程序会阶梯式地赠送更多的积分。
题目描述
有一个应用程序的签到送积分的规则如下:
首先,每天登录将至少得到 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;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)