1 条题解

  • 0
    @ 2026-6-7 9:43:48
    #include <algorithm>
    #include <iostream> // 使用 iostream 替代 cstdio
    
    using namespace std;
    
    const int N = 105;
    
    int n;
    int a[N];
    int cnt;
    
    int main() {
        // 输入数据规模及数组元素
        cin >> n;
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
        }
    
        // 核心逻辑:模拟不断削减数值的过程
        while (1) {
            // 步骤 1:寻找当前数组中值最大的元素下标 mx
            // 初始假设最后一个元素最大,遍历更新
            int mx = n;
            for (int i = 1; i <= n; i++) {
                if (a[i] >= a[mx]) {
                    mx = i;
                }
            }
    
            // 终止条件:如果最大值已经是 0,说明所有数都已被减为 0,退出循环
            if (a[mx] == 0) {
                break;
            }
    
            // 步骤 2:寻找当前数组中所有大于 0 的元素里的最小值 mn
            // 这里以最大值 a[mx] 作为初始基准(因为它肯定是 > 0 的)
            int mn = a[mx];
            for (int i = 1; i <= n; i++) {
                if (a[i] > 0) {
                    mn = min(mn, a[i]);
                }
            }
    
            // 步骤 3:执行操作
            // 将找到的最大值减去当前的最小值(相当于进行了一次消除或削减)
            a[mx] -= mn;
    
            // 计数器加 1,记录操作次数
            cnt++;
        }
    
        // 输出最终的操作次数
        cout << cnt << endl;
    
        return 0;
    }
    
    
    • 1

    信息

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