欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

P1031 均分纸牌

程序员文章站 2022-07-16 12:15:24
...

题目

P1031 均分纸牌

分析

先求出平均数,再把每堆牌的数都减去平均数,再移动正数加到负数中,使每堆牌都为0即可。然后,考虑左右两端从哪里开始。就是左边第一个不为0的到右边最后一个不为0的。

源代码

#include<cstdio>
#include<iostream>

using namespace std;
int array[101];
int main()
{
	int n,i,j,sum=0,he=0,average,step=0;
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>array[i];
		he+=array[i];
	}
	average=he/n;
	for(i=1;i<=n;i++)array[i]-=average;
	int begin,end;
	for(i=1;i<=n;i++)
	{
		if(array[i]!=0)
		{
			begin=i;
			break;
		}
	}
	for(i=n;i>0;i--)
	{
		if(array[i]!=0)
		{
			end=i;
			break;
		}
	}
	while(begin<end)
	{
		array[begin+1]+=array[begin];
		array[begin]=0;
		step++;
		begin++;
		while(array[begin]==0&&begin<end)begin++;
	}
	cout<<step<<endl;
	return 0;
 }

结果

P1031 均分纸牌
这就是一道典型的贪心算法题。