1 条题解

  • 0
    @ 2026-6-19 10:30:41

    📝 题目大意

    定义一个三位正整数为"326-like number",当其百位数字 × 十位数字 = 个位数字。给定 NN100N919100 \le N \le 919),求不小于 NN 的最小 326-like number。

    💡 解题思路

    1. 题目分析NN 的范围在 [100,919][100, 919],最大答案不超过 999999(三位数范围内),数据量极小,可以直接暴力枚举。
    2. 算法推导
      • 定义函数 is326Like(x),提取百位 a = x / 100、十位 b = (x / 10) % 10、个位 c = x % 10,判断 a * b == c 即可。
      • x = N 开始向上枚举到 999,遇到第一个满足条件的 x 就输出并 break。由于题目保证有解,最坏情况下 9999999×9=8199 \times 9 = 81 \neq 9不行),但 9009009×0=09 \times 0 = 0)满足条件,因此必能在 [N,999][N, 999] 内找到答案。
    3. 边界与细节
      • NN 本身已是 326-like number 时直接输出 NN(如样例 2)。
      • 上界设为 999999 即可覆盖所有可能答案,无需担心越界。

    ⏱️ 复杂度分析

    • 时间复杂度O(999N)O(999 - N),即最多枚举约 900900 个数,常数级别。
    • 空间复杂度O(1)O(1),仅使用常数个变量。

    💻 标准代码 (C++)

    #include <iostream>
    using namespace std;
    
    // 判断一个三位数是否为 326-like number
    bool is326Like(int x) {
        int a = x / 100;         // 百位数字
        int b = (x / 10) % 10;   // 十位数字
        int c = x % 10;          // 个位数字
        return a * b == c;       // 百位 × 十位 == 个位
    }
    
    int main() {
        int N;
        cin >> N;
        // 从 N 开始向上枚举,找到第一个 326-like number
        for (int x = N; x <= 999; x++) {
            if (is326Like(x)) {
                cout << x << endl;
                break;           // 找到即停止
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    741
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者