二级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++二级练习 luogu-B3786, [信息与未来 2023] 幸运数字
📅 2025-01-14·✍️ OneCoder·计算中...·⏱️ 5 分钟
#GESP#C++#多重循环
GESP二级练习,多层循环分支嵌套练习,难度★✮☆☆☆。
luogu-B3786 [信息与未来 2023] 幸运数字
题目要求
题目描述
如果把一个数字十进制表示的奇数位和偶数位分别相加得到的和相同,小小就认为它是一个幸运的数字。例如:
- 奇数位相加 、偶数位相加 ,因此 不是幸运数字;
- 奇数位相加 、偶数位相加 ,因此 是幸运数字。
对于给定的 和 ,小小希望你求出 中幸运数字的数量。
输入格式
输⼊数据仅一行,包含空格分隔的两个整数 和 。
输出格式
输出一行一个整数,代表 中幸运数字的数量。
样例输入 #1
CONSOLE
1 行
1 100
样例输出 #1
CONSOLE
1 行
9
样例输入 #2
CONSOLE
1 行
4096 65536
样例输出 #2
CONSOLE
1 行
3454
提示
- 对于 的数据,满足 。
题目分析
- 首先,我们需要读取输入的范围a和b。
- 接着,我们需要遍历从a到b的所有数字,检查每个数字是否为幸运数字。
- 为了检查一个数字是否为幸运数字,我们需要将其分解为奇数位和偶数位,并分别计算它们的和。
- 如果奇数位和偶数位的和相等,则该数字为幸运数字,我们需要统计这些幸运数字的数量。
- 最后,我们输出统计到的幸运数字的数量。
在实现时,我们可以使用一个循环来遍历从a到b的所有数字,并在循环中使用另一个循环来分解当前数字并计算奇数位和偶数位的和。
示例代码
C++
28 行
#include <iostream>
using namespace std;
int main() {
int a, b; // 定义变量a和b,用于存储输入的范围
cin >> a >> b; // 从输入流中读取a和b的值
int count = 0; // 初始化计数器,用于统计幸运数字的数量
for (int i = a; i <= b; i++) { // 遍历从a到b的所有数字
bool isOdd = true; // 初始化标志,用于标记当前数字是否为奇数
int oddSum = 0; // 初始化奇数位数和
int evenSum = 0; // 初始化偶数位数和
int curNum = i; // 当前数字
while (curNum != 0) { // 当当前数字不为0时,继续循环
int digit = curNum % 10; // 获取当前数字的最后一位
if (isOdd) {
oddSum += digit; // 如果当前位是奇数位,则将数字加到奇数位数和中
} else {
evenSum += digit; // 如果当前位是偶数位,则将数字加到偶数位数和中
}
isOdd = !isOdd; // 切换标志,用于下一位的判断
curNum /= 10; // 移除当前数字的最后一位
}
if (oddSum == evenSum) { // 如果奇数位数和与偶数位数和相等,则当前数字为幸运数字
count++; // 增加计数器
}
}
cout << count; // 输出计数器的值,即幸运数字的数量
return 0;
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
读者讨论与留言
💬 还没有读者留言,快来成为第一个讨论者吧!