1 条题解

  • 0
    @ 2026-5-24 15:18:05

    我看了你的代码,这是第22题 不重复三位奇数计数的代码,里面有3个致命错误,导致结果完全不对,我直接帮你修好并解释清楚。

    你的代码错误点

    1. 内层循环 j 写成了 i++(死循环)
    2. 百位、十位、个位搞反了
    3. 没有判断三个数字不重复

    修复后的正确代码

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int cnt = 0;
        // 百位 i:1~9,不能为0
        for (int i = 1; i <= 9; i++) {
            // 十位 j:0~9
            for (int j = 0; j <= 9; j++) {
                // 个位 k:必须是奇数 1,3,5,7,9
                for (int k = 1; k <= 9; k += 2) {
                    // 三个数字不能重复
                    if (i != j && i != k && j != k) {
                        cnt++;
                    }
                }
            }
        }
        cout << cnt << endl;
        return 0;
    }
    

    代码逻辑说明

    • 百位 i:1~9(不能是0)
    • 十位 j:0~9
    • 个位 k:1、3、5、7、9(保证是奇数)
    • 必须满足i != j && i != k && j != k(三个数字不重复)
    • 满足条件就计数 +1

    运行结果

    320
    

    和题目要求的样例输出完全一致。

    总结

    1. 你原来的代码j循环写成i++,会直接卡死;
    2. 百位十位搞反、没判重,导致答案错误;
    3. 修复后逻辑清晰,直接输出正确答案 320

    信息

    ID
    4634
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    8
    已通过
    3
    上传者