【GESP】C++一级练习 luogu-B2078, 含 k 个 3 的数
GESP一级循环和基本运算练习,但是相比普通的题来说,略有难度,难度★✮☆☆☆。
luogu-B2078
题目要求
题目描述
输入两个正整数 $m$ 和 $k$,其中 $1 \lt m \leq 10^{15}$,$1 \lt k \leq 15$ ,判断 $m$ 是否恰好含有 $k$ 个 $3$,如果满足条件,则输出
YES
,否则,输出NO
。
输入格式
输入一行,为两个整数 $m,k$,中间用单个空格间隔。
输出格式
满足条件,则输出
YES
,否则,输出NO
。
样例输入 #1
1
43833 3
样例输出 #1
1
YES
题目分析
- 首先,我们需要直接处理输入的正整数 $m$,通过对 $m$ 进行取模和整除操作逐位检查每个数字。
- 在检查每个数字的同时,我们需要维护一个计数器,用于统计数字 3 的出现次数。
- 当我们遍历完所有数字后,比较计数器的值与输入的正整数 $k$,如果相等则输出
YES
,否则输出NO
。
示例代码
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 <iostream> // 引入输入输出流库
using namespace std;
int main() {
long long m, k; // 定义两个长整型变量 m 和 k
cin >> m >> k; // 从标准输入读取两个正整数 m 和 k
int ans = 0; // 初始化计数器 ans,用于统计数字 3 的个数
while (true) { // 无限循环,直到手动中断
if (m % 10 == 3) { // 检查当前最低位是否为 3
ans++; // 如果是 3,计数器加 1
}
m /= 10; // 去掉最低位,继续检查下一位
if (m == 0) { // 如果 m 变为 0,说明所有位数都已检查完
break; // 退出循环
}
}
if (ans == k) { // 检查计数器 ans 是否等于 k
cout << "YES"; // 如果相等,输出 "YES"
} else {
cout << "NO"; // 否则,输出 "NO"
}
return 0; // 返回 0,表示程序正常结束
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
本文由作者按照 CC BY 4.0 进行授权