1 条题解

  • 0
    @ 2023-6-11 12:16:46

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    int a[1005];//数组a记录每堆的纸牌数
    int main()
    {
        int n,i,sum=0,aver,ans=0;//n堆纸牌,纸牌的总数为sum,每堆平均aver张,最少移动ans次
        scanf("%d",&n);//输入
        for(i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            sum+=a[i];//累加
        }
        aver=sum/n;//求平均值
        for(i=1;i<=n;i++)//从前向后
        {
            if(a[i]<aver)//如果这一堆纸牌的数量小于平均值
            {
                a[i+1]-=(aver-a[i]);//就用后一堆的纸牌来补齐
                ans++;//操作数+1
            }
            else if(a[i]>aver)//注意是else if而不是else,因为如果这一堆纸牌的数量等于平均值,就不需要对其进行操作了
            {
                a[i+1]+=(a[i]-aver);//就将多余的纸牌放到下一堆上
                ans++;//操作数+1
            }
        }
        printf("%d\n",ans);//打印
        return 0;
    }
    
    • 1

    信息

    ID
    2291
    时间
    1000ms
    内存
    16MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者