1 条题解

  • 0
    @ 2026-1-30 18:50:30
    #include <iostream>
    using namespace std;
    
    int main() {
        int N, M;                    // N为硬币总数,M为操作的人数
        // [1] 输入硬币数量N和操作人数M
        cin >> N >> M;
        int arr[5005] = {0};         // 存储硬币状态(0=正面向上,1=反面向上),数组大小满足N≤5000
    
        // [2] 模拟M个人依次翻转硬币的过程
        for (int k = 1; k <= M; ++k) {
            // [3] 第k个人翻转所有编号为k的倍数的硬币
            for (int i = k; i <= N; i += k) {
                arr[i] = 1 - arr[i]; // 翻转状态:0变1,1变0
            }
        }
    
        // [4] 遍历所有硬币,收集并输出正面向上(状态为0)的硬币编号
        for (int i = 1; i <= N; ++i) {
            if (arr[i] == 0) {
                cout << i << " ";
            }
        }
    
        return 0;
    }
    
    • 1

    信息

    ID
    1205
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    1
    已通过
    1
    上传者