小 Bob 喜欢玩砖盒。他把砖块一个叠一个地堆成不同高度的盒子。“看,我堆了一堵墙!”他告诉他的大姐姐Alice。“嗯,你该把所有的砖盒建得一样高。这样,你就建成了一堵真正的墙。”她回答。思索了一会,小Bob 认为她是对的。然后,他就开始重新摆放砖盒,一块接一块,最后,所有的砖盒都一样高了。但Bob 很懒,他想只移动最少数目的砖块来使所有的砖盒一样高。你能帮助他吗?
2.输入描述
输入包含多个数据集合。每个数据集合的第一行是一个整数 n,表示该Bob 建的砖盒个数。第二行则包含n 个整数,每个整数代表每个砖盒的高度hi,表示该砖盒中有hi 块砖。假定1≤n≤50,1≤hi≤100。砖块的总数目能被砖盒的数目整除。因此,一定能把各个砖盒移成相同的高度。输入以 0 结束。不要处理0。
3.输出描述
对于每个数据集,先打印出该数据集的序号,请参考输出样例。然后打印这样一行“The minimum number of moves is k.”。这里,k 指把这些砖盒移到同一高度所需的最小次数。在每个数据集后输出一个空行。
4.输入样例
6
5 2 4 1 7 5
0
5.输出样例
Set #1
The minimum number of moves is 5.
#include "stdafx.h"
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ifstream in("D:\\visual studio 2013 code\\test.txt");
vector<int>v;
int num;
int avg;
int row = 0;
while (in >> num)
{
if (num == 0) break;
v.clear();
row ++;
int temp;
int sum = 0;
int act = 0;
for (int i = 0; i < num;i++)
{
in >> temp;
v.push_back(temp);
sum += temp;
}
avg = sum / num;
for (int j = 0; j < v.size(); j++)
{
if (v[j]>avg) act += (v[j] - avg);
}
cout << "set #" << row << endl;
cout << "the minimum number of moves is" << act << endl;
}
return 0;
}