[信息与未来 2026] 幸运数字
只关心每个数字出现次数的奇偶,不需要真的存 10 个计数器。
一、先回答问题
结论
用 10 位二进制 mask 记录 0-9 的奇偶性。读到数字 d,就翻转第 d 位;最后 mask 为 0 就是幸运数字。
课堂安排
先抓住模型,再用一个小样例手推,最后把判断写成稳定的 C++14 代码。
二、核心观察
状态压缩
偶数次记 0,奇数次记 1。
判断
所有数字都是偶数次 ⇔ 10 个二进制位全为 0。
三、互动演示
输入一个数试试:
| 读到数字 | 当前 mask |
|---|
四、自己选答案
问题 1:这题最关键的状态是什么?
五、手推结果
| 数字 | 结果 | 原因 |
|---|---|---|
| 11 | 幸运 | 1 出现 2 次 |
| 23333 | 不幸运 | 2 出现 1 次 |
六、C++14 参考代码
#include <bits/stdc++.h>
using namespace std;
bool lucky(int x) {
int mask = 0;
while (x > 0) {
int d = x % 10;
mask ^= (1 << d);
x /= 10;
}
return mask == 0;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int a, b;
cin >> a >> b;
int ans = 0;
for (int x = a; x <= b; x++) {
if (lucky(x)) ans++;
}
cout << ans << '\n';
return 0;
}读代码重点
先看状态变量,再看核心判断,最后检查边界和输出格式。