C++ 算法:奶牛捣乱干草堆 - 最少移动干草捆数

农夫约翰精心整理的 N 堆干草,每堆干草的高度相同。

但是,奶牛们趁着他不注意在干草堆之间移动了一些干草捆,使得各个干草堆的高度可能不再相同了。

给定所有干草堆的新高度,请帮助约翰确定,为了使所有干草堆恢复到原来的相同高度,至少要移动的最小干草捆数。

思路

  1. 先求出干草堆高度的平均值。
  2. 然后遍历每个干草堆,统计移动的干草捆数。

具体实现

  1. 读入干草堆数和每个干草堆的高度,计算出平均高度。
  2. 遍历每个干草堆,统计该堆高度与平均高度的差值的绝对值,累加到答案中。
  3. 输出答案。

代码如下

#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() 函数用于四舍五入取整。

希望这能帮助你理解这个算法!

C++ 算法:奶牛捣乱干草堆 - 最少移动干草捆数

原文地址: https://www.cveoy.top/t/topic/np7B 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录