签到积分c++/c语言代码+解析

题目背景

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

题目描述

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

首先,每天登录将至少得到 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;
}

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的基于C语言的学生签到考勤系统代码。这个代码实现了基本的签到功能,包括输入学生信息、保存学生信息、识别学生信息、记录签到信息等。 ```c #include <stdio.h> #include <string.h> #define MAX_STUDENT 1000 #define MAX_NAME 30 struct Student { char name[MAX_NAME]; int id; int age; char gender; int isPresent; }; // 根据名字查找学生 int findStudentByName(struct Student students[], int n, char name[]) { for (int i = 0; i < n; i++) { if (strcmp(students[i].name, name) == 0) { return i; } } return -1; } // 根据ID查找学生 int findStudentById(struct Student students[], int n, int id) { for (int i = 0; i < n; i++) { if (students[i].id == id) { return i; } } return -1; } // 添加学生 void addStudent(struct Student students[], int *n) { struct Student student; printf("请输入学生姓名:"); scanf("%s", student.name); printf("请输入学生ID:"); scanf("%d", &student.id); printf("请输入学生年龄:"); scanf("%d", &student.age); printf("请输入学生性别:"); scanf("%s", &student.gender); student.isPresent = 0; students[*n] = student; (*n)++; } // 识别学生信息 void recognizeStudent(struct Student students[], int n) { char name[MAX_NAME]; printf("请输入学生姓名:"); scanf("%s", name); int index = findStudentByName(students, n, name); if (index == -1) { printf("未找到该学生!\n"); } else { printf("学生信息:\n"); printf("姓名:%s\n", students[index].name); printf("ID:%d\n", students[index].id); printf("年龄:%d\n", students[index].age); printf("性别:%c\n", students[index].gender); } } // 记录签到信息 void recordAttendance(struct Student students[], int n) { char name[MAX_NAME]; printf("请输入学生姓名:"); scanf("%s", name); int index = findStudentByName(students, n, name); if (index == -1) { printf("未找到该学生!\n"); } else { students[index].isPresent = 1; printf("学生:%s 签到成功!\n", name); } } // 显示所有学生信息 void showAllStudents(struct Student students[], int n) { printf("所有学生信息:\n"); for (int i = 0; i < n; i++) { printf("姓名:%s,ID:%d,年龄:%d,性别:%c,是否签到:%s\n", students[i].name, students[i].id, students[i].age, students[i].gender, students[i].isPresent ? "是" : "否"); } } int main() { struct Student students[MAX_STUDENT]; int n = 0; int choice; do { printf("请选择操作:\n"); printf("1.添加学生\n"); printf("2.识别学生信息\n"); printf("3.记录签到信息\n"); printf("4.显示所有学生信息\n"); printf("5.退出\n"); scanf("%d", &choice); switch (choice) { case 1: addStudent(students, &n); break; case 2: recognizeStudent(students, n); break; case 3: recordAttendance(students, n); break; case 4: showAllStudents(students, n); break; case 5: break; default: printf("无效操作!\n"); break; } } while (choice != 5); return 0; } ``` 这个代码使用结构体存储学生信息,通过输入进行添加学生、识别学生信息、记录签到信息等操作。同时,代码也提供了一个简单的菜单来帮助用户进行操作选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值