【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
题目分析
- 读取发送短信的总次数
n
。 - 遍历每条短信,读取每条短信的字数
b
。 - 判断每条短信的字数是否超过 70:
- 如果不超过 70,则增加 0.1 元的资费。
- 如果超过 70,则计算需要发送的短信条数(整除 70 加上是否有余数),并增加相应的资费。
- 累加所有短信的资费,得到总资费
ans
。 - 输出总资费
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 进行授权