【GESP】C++二级练习 luogu-B3699 [语言月赛202301] 就要 62
GESP二级练习,多层循环和分支练习,难度★★☆☆☆。
luogu-B3699 [语言月赛202301] 就要 62
题目要求
题目描述
给你一个整数 $x$,你需要判断,这个整数中是否出现过数字 $62$ 或者能够被 $62$ 整除。如果是,输出
Yes
,否则输出No
即可。
输入格式
输入共一行,为一个整数 $x$。
输出格式
输出共一行。
如果 $x$ 中出现过数字 $62$ 或者能够被 $62$ 整除,输出一行
Yes
,否则输出一行No
。
输入 #1
1
11624
输出 #1
1
Yes
输入 #2
1
12214
输出 #2
1
Yes
输入 #3
1
16124
输出 #3
1
No
输入 #4
1
62
输出 #4
1
Yes
说明/提示
样例 1 解释
显然,$11624$ 中出现了 $62$。
样例 2 解释
容易知道,$12214 = 62 \times 197$,所以 $12214$ 可以被 $62$ 整除。
样例 3 解释
虽然 $16124$ 中出现了 $6$ 和 $2$,但是没有出现一个完整的 $62$。这种情况不被叫做【出现 $62$】。
样例 4 解释
显然,$62$ 中出现了 $62$,也是 $62$ 的倍数。
数据规模与约定
对于 $20\%$ 的测试数据,保证 $x \leq 10$;
对于 $40\%$ 的测试数据,保证 $x < 100$;
对于 $100\%$ 的测试数据,保证 $1 \leq x \leq 10 ^ {18}$。
题目分析
解题思路
- 首先,我们需要理解题目的核心要求:
- 给定一个数字x
- 判断这个数字是否满足以下两个条件之一:
- 数字中出现连续的”62”
- 数字能被62整除
- 解题思路:
- 对于第一个条件,我们需要检查数字中是否存在连续的”62”:
- 从右向左逐位检查数字
- 每次取相邻两位,判断是否为”62”
- 为了不遗漏可能性,需要检查数字的所有子串
- 对于第二个条件,直接判断是否能被62整除
- 两个条件满足任意一个即可输出”Yes”
- 对于第一个条件,我们需要检查数字中是否存在连续的”62”:
- 具体实现:
- 读入一个数字x
- 从x开始,每次去掉最后一位数字,直到0为止
- 对每个数字,从右向左检查是否出现”62”
- 同时检查是否能被62整除
- 如果找到符合条件的情况,输出”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
26
27
#include <iostream>
using namespace std;
int main() {
// 声明变量x用于存储输入的数字
long long x;
cin >> x;
// 从x开始,每次去掉最后一位数字,直到0为止
for (long long i = x; i != 0;) {
// j用于存储当前要检查的数字
long long j = i;
// 从右向左检查每一位数字
while (j != 0) {
// 判断是否出现连续的"62"或者能被62整除
if ((j % 10 == 2 && (j / 10) % 10 == 6) || j % 62 == 0) {
cout << "Yes";
return 0;
}
// 去掉最后一位数字
j /= 10;
}
// 去掉原数字的最后一位
i /= 10;
}
// 如果没有找到符合条件的情况,输出No
cout << "No";
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权