1 条题解

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

    📝 题目大意

    给定正整数 N,KN, K 和一个严格递增的数列 AA,筛选出 AA 中所有能被 KK 整除的元素,将每个元素除以 KK 后按原顺序输出。

    💡 解题思路

    1. 题目分析N,K,Ai100N, K, A_i \leq 100,数据范围极小。数列 AA 本身已按升序给出,因此筛选后自然保持升序,无需额外排序。题目保证至少存在一个 KK 的倍数,不会出现空输出。
    2. 算法推导
      • 读入 N,KN, K 和数组 AAstd::vector<int> A(N))。
      • 遍历数组 AA 中的每个元素 xx
        • xmodK=0x \bmod K = 0,则输出 x/Kx / K
      • 用布尔变量 first 控制空格分隔:第一个输出前不加空格,之后每个输出前加一个空格。
    3. 边界与细节
      • K=1K = 1 时,所有元素都是 KK 的倍数,全部输出(如样例 2)。
      • 输入保证严格递增,遍历顺序即输出顺序,无需排序。
      • 注意输出末尾换行(cout << endl)。

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),只需一次遍历。
    • 空间复杂度O(N)O(N),存储输入数组。

    💻 标准代码 (C++)

    #include <iostream>
    #include <vector>
    using namespace std;
    int main() {
        int N, K;
        cin >> N >> K;
        vector<int> A(N);
        for (int i = 0; i < N; i++) {
            cin >> A[i];
        }
        bool first = true;  // 控制空格输出,避免行首多余空格
        for (int x : A) {
            if (x % K == 0) {  // 判断是否为 K 的倍数
                if (!first) cout << " ";  // 非首个元素前加空格
                cout << x / K;            // 输出除以 K 的结果
                first = false;
            }
        }
        cout << endl;  // 输出换行
        return 0;
    }
    
    • 1

    信息

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