1 条题解

  • 0
    @ 2026-2-1 16:02:00
    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
        int n,sum=0,sum1=0; // n:纸牌堆数,sum:所有纸牌总张数,sum1:最少移动次数
        cin >> n; // [1] 输入纸牌堆数n
        int arr[n]; // 存储每堆纸牌的张数
        // [2] 输入每堆纸牌数量,并累加计算总张数
        for(int i = 0; i < n; i++){
            cin >> arr[i];
            sum += arr[i];
        }
        int a = sum / n; // [3] 计算每堆需要达到的平均张数
        // [4] 贪心策略:从左到右调整每堆,将多余/不足的纸牌转移到下一堆
        for(int i = 0; i < n; i++){
            if(a == arr[i]) 
                continue; // 当前堆已符合平均数量,跳过
            arr[i+1] += arr[i] - a; // 将当前堆的差额转移到下一堆
            sum1++; // 每转移一次,移动次数加1
        }
        cout << sum1; // [5] 输出最少移动次数
        return 0;
    }
    
    • 1

    信息

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