1.简单描述
将n堆不等高的木块,移动最少的木块数,是木块堆等高。
2.思路
刚看题时,想用动态数组,然后用set排序,再用upper_bound区分是否大于平均数。后来实际写程序时发现这样实在是太麻烦了,后两步可用一个for循坏和if解决。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int n,i,a,b,j=1;
cin>>n;
while(n)
{ int sum=0,all=0;
vector<int>v;
for(i=0;i<n;i++)
{
cin>>a;
sum+=a;
v.push_back(a);
}
b=sum/n;
for(i=0;i<n;i++)
{
if(v[i]>b) all+=(v[i]-b);
}
cout<<"Set #"<<j<<endl;
cout<<"The minimum number of moves is "<<all<<"."<<endl<<endl;
j++;
cin>>n;
}
return 0;
}
这道题的细节不少 空格、空白行、.等等。而且这道题要求可循环输入,最初时没注意到最外层的循坏。输入样例的0,让我困惑了好久。细节不少.
注意双重循环是否需要再对某些变量初始化。
3.体会
这个题比较简单,但写了挺长时间,忽略的细节太多。