C++ 算法:奶牛捣乱干草堆 - 最少移动干草捆数
C++ 算法:奶牛捣乱干草堆 - 最少移动干草捆数
农夫约翰精心整理的 N 堆干草,每堆干草的高度相同。
但是,奶牛们趁着他不注意在干草堆之间移动了一些干草捆,使得各个干草堆的高度可能不再相同了。
给定所有干草堆的新高度,请帮助约翰确定,为了使所有干草堆恢复到原来的相同高度,至少要移动的最小干草捆数。
思路
- 先求出干草堆高度的平均值。
- 然后遍历每个干草堆,统计移动的干草捆数。
具体实现
- 读入干草堆数和每个干草堆的高度,计算出平均高度。
- 遍历每个干草堆,统计该堆高度与平均高度的差值的绝对值,累加到答案中。
- 输出答案。
代码如下
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
int heights[n];
int sum = 0;
for (int i = 0; i < n; i++) {
cin >> heights[i];
sum += heights[i];
}
int avg = round((double)sum / n); // 四舍五入取整
int ans = 0;
for (int i = 0; i < n; i++) {
ans += abs(heights[i] - avg);
}
cout << ans << endl;
return 0;
}
注意: 代码中的 round() 函数用于四舍五入取整。
希望这能帮助你理解这个算法!
原文地址: https://www.cveoy.top/t/topic/np7B 著作权归作者所有。请勿转载和采集!