3 solutions

  • 2
    @ 2021-10-18 0:45:30

    突然发现还没有人发题解

    思路

    用sum算出所有数字的和然后s为平均数 cnt记录移的次数 贪心可知 从左到右找当前牌堆数,大于平均数移出,小于平均数移入,都算一次操作,等于时不动,每次移动时都将该移动的牌移到下一个牌堆,应该移动的数为a[i]-s,最后输出结果

    代码

    #include<stdio.h>
    int main()
    {
    	int n,a[105]={0},sum=0,s=0,cnt=0;
    	scanf("%d",&n);
    	for(int i=0;i<n;i++)
    	{
    		scanf("%d",&a[i]);
    		sum+=a[i];
    	}
    	s=sum/n;
    	for(int i=0;i<n;i++)
    	{
    		if(a[i]!=s)
    		{
    			cnt++;
    			a[i+1]+=a[i]-s;
    		}
    	}
    	printf("%d",cnt);
    	return 0;
    }
    

    Information

    ID
    111
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    4
    Tags
    # Submissions
    105
    Accepted
    48
    Uploaded By