文章

【GESP】C++二级练习 bcqm-3172, 短信计费

GESP二级练习,涉及多层条件和循环嵌套,难度★✮☆☆☆。

bcqm-3172

题目要求

题目描述

用手机发短信,一条短信资费为 0.1元,但限定一条短信的内容在 70 个字以内(包括 70 个字)。如果一次所发送的短信超过了 70 个字,则会按照每 70 个字一条短信的限制把它分割成多条短信发送。假设已经知道某人当月所发送的短信的字数,试统计一下他当月短信的总资费。

输入格式

第一行是整数 $n(1≤n≤100)$,表示当月发送短信的总次数,接着 $n$ 行每行一个整数(不超过 1000),表示每次短信的字数。

输出格式

输出一行,当月短信总资费,单位为元,精确到小数点后 1 位。

样例输入 #1

1
2
3
4
5
6
7
8
9
10
11
10
39
49
42
61
44
147
42
72
35
46

样例输出 #1

1
1.3

题目分析

  1. 读取发送短信的总次数 n
  2. 遍历每条短信,读取每条短信的字数 b
  3. 判断每条短信的字数是否超过 70:
    • 如果不超过 70,则增加 0.1 元的资费。
    • 如果超过 70,则计算需要发送的短信条数(整除 70 加上是否有余数),并增加相应的资费。
  4. 累加所有短信的资费,得到总资费 ans
  5. 输出总资费 ans,保留一位小数。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
    int a; // 读取发送短信的总次数
    cin >> a;
    int b; // 读取每条短信的字数
    double ans = 0; // 初始化总资费为0
    for (int i = 1; i <= a; i++) {
        cin >> b; // 读取每条短信的字数
        if (b <= 70) {
            ans += 0.1; // 如果字数不超过70,则增加0.1元的资费
        }
        if (b > 70) {
            if (b % 70 == 0) {
                ans += b / 70 * 0.1; // 如果字数是70的整数倍,则增加相应的资费
            }
            if (b % 70 != 0) {
                ans += (b / 70 + 1) * 0.1; // 如果字数不是70的整数倍,则增加相应的资费,并考虑多出的字数
            }
        }
    }
    printf("%.1f", ans); // 输出总资费,保留一位小数
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

本文由作者按照 CC BY 4.0 进行授权