该题属于综合题。
要点如下:
1. 法1为数组,法2为vector容器,注意二者的区别,前者为固定长度,后者为不定长度。
2. 做题思路:很关键!
对于每一摞积木,如果当前摞积木的数量超过平均值,也就是
当前摞积木数量 - 平均值 > 0
, 则把超出平均值数量的积木移到不足平均值的那一摞,超过的数量表示需要挪动的次数。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n, i;
// 法1:数组长度固定为50
// int h[50];
// 持续输入n。多组测试数据,需要输入多个n
while(cin >> n)
{
// 法2:vector容器,数组长度不定
// 创建一个包含n个元素的容器h,每个元素的值都是0
vector<int> h = vector<int>(n,0);
// 注意点:sum,result,aver需要考虑重置为0
int sum = 0;
// result定义输出结果,表示积木需要挪动的次数
int result = 0;
int aver = 0;
// 当n=0时,输入结束
if(n == 0) break;
// 遍历每一摞积木,求总和
for(i = 0; i < n; i++)
{
cin >>h[i];
sum += h[i];
}
// 积木块的平均高度
aver = sum / n;
for(i = 0; i < n; i++)
{
// 需要移动的最少积木块的数量就是每个积木堆与积木平均高度的差值
// 要么均为正数,要么均为负数
// 与积木平均高度相比,多余积木的数量就是需要移动的积木数量
if((h[i]-aver) > 0)
{
result += (h[i]-aver);
}
}
cout << result << endl << endl;
}
return 0;
}