top1编程
← 返回题目
题解

均分纸牌

1 条题解

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