题意:给出一堆高度不一的砖头,现在使他们高度一样,问最少的移动次数,(每减少1就是移动一次)
思路:求出平均高度,然后模拟最后平均高度的数组,也就是说,每个数组对应每一个平均高度,也就是说比平均高度大的那些数据,就移动了,就这样直接求和
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int num[150]; 5 int main() 6 { 7 int n,t=1; 8 while(cin >> n &&n) 9 { 10 int tot=0; 11 for(int i=0;i<n;++i){ 12 cin >> num[i]; 13 tot+=num[i]; 14 } 15 int ave=tot/n; 16 int tar[150]; 17 fill(tar,tar+n,ave); 18 int sn=tot%n; 19 for(int i=n-1;i>=0&&sn;--i){ 20 num[i++];sn--; 21 } 22 int mmin=0; 23 for(int i=0;i<n;++i) 24 if(tar[i]<num[i]) mmin+=num[i]-tar[i]; 25 cout << "Set #" << t++ << endl; 26 cout << "The minimum number of moves is " << mmin << "." << endl; 27 cout << endl; 28 } 29 }