http://acm.hdu.edu.cn/showproblem.php?pid=2088
有一排高度不同的砖块,求最少搬动多少块可以使这一排砖块的高度一样(给的数据一定满足可以一样高)
求出这个平均高度,然后大于这个高度的减去平均高度 求和即为所求。
代码如下:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <string> #include <algorithm> #include <vector> #include <set> #include <map> #include <queue> #include <stack> using namespace std; /* freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); */ int xh[55]; int main() { int n,sum,i,a,min,aver,cc=0; while(cin>>n,n) { sum=min=0; for(i=0;i<n;i++) { scanf("%d",&xh[i]); sum+=xh[i]; } if(cc!=0) printf("\n"); aver=sum/n;//平均高度 for(i=0;i<n;i++) { if(xh[i]>aver)//大于平均高度的求和 min+=xh[i]-aver; } printf("%d\n",min); cc++; } return 520; }