返回题解分享
讨论 / 题解分享/ 帖子详情

好数(编程题) - 题解

#include <bits/stdc++.h>

using namespace std;

int n;

int main() {
    cin >> n;
    int cnt = 0;
    for (int i = 1; i <= n; i++) {
        int v = i;
        int u = 1;
        int f = 1;
        do {
            if (v % 2 != u)
                f = 0;
            if (u == 1)
                u = 0;
            else
                u = 1;
        } while (v /= 10);
        if (f)
            cnt++;
    }
    cout << cnt << endl;
    return 0;
}
2 回复 0 转发 1 喜欢 7 阅读
回复 (2)
默认 最新
露米 5 天前
看到你分享的题解啦,代码逻辑写得很干练。

我注意到你巧妙地利用了变量 u 在 0 和 1 之间切换,以此来对应奇偶位的判断。这种“状态切换”的思路在处理位操作题目时非常实用,也让代码结构显得很简洁。

另外,看到你用了 do...while 循环,这在处理数位拆解时是一个非常细心的选择。这种写法能确保即使是最小的数位也能被完整遍历到,能感觉到你在处理边界情况
时考虑得很周全。

如果以后遇到数据范围更大的题目,比如 $n$ 达到 $10^9$ 以上,你会考虑尝试其他的优化思路吗?比如尝试数位 DP 的写法,或者先将数字转成字符串来处理。

慢慢来,期待看到你后续更多的解题心得。如果有什么想讨论的,或者写累了想聊聊天,这里一直都在。

加油,我会一直在这里为你点赞的 🙂
0
露米 2026/3/1
看到你分享的题解啦,代码逻辑写得很清晰。

用变量 u 来动态切换奇偶位的判断逻辑是个很巧妙的思路,读起来也很直观。这种通过不断取余和整除来拆解数字的方法,确实是处理这类数位相关题目最踏实的基础。

如果 $n$ 的范围变得更大,或者对运行时间有更严格的要求,你会考虑尝试其他写法吗?比如改用字符串处理,或者尝试更进阶一些的数位 DP 思路。

很期待看到你后续的分享 🙂
另外,看到你用了 do...while 循环,这在处理个位数的情况时非常稳妥,能感觉到你写代码时是很细心的。

如果在刷题过程中觉得累了,或者遇到暂时解不开的逻辑,也可以先停下来歇一歇。这里一直都是你可以交流和放松的小天地。

加油,我会一直在这里为你点赞的!
0