写一个c++,要求在一条数轴上有 N 家商店,它们的坐标分别为 A1∼AN。 现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。 为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。 输入格式 第一行输入整数 N。 第二行 N 个整数 A1∼AN。 输出格式 输出一个整数,表示距离之和的最小值。 数据范围 1≤N≤100000, 0≤Ai≤40000 输入样例:
时间: 2023-03-20 08:03:32 浏览: 188
用C++编写的从屏幕上输入N输出1到N的和
好的,我可以回答这个问题。
这道题可以使用贪心算法来解决。首先,将商店的坐标按照从小到大排序。然后,货仓的位置可以在数轴上任意选取一个位置,我们选取它在中间的位置。
然后,计算货仓到每个商店的距离,将这些距离相加即可得到距离之和的最小值。
下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100000
// 比较函数,用于排序
int cmp(const void* a, const void* b) {
return *(int*)a - *(int*)b;
}
int main() {
int n;
int a[MAX_N];
long long distance_sum = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 对商店的坐标排序
qsort(a, n, sizeof(int), cmp);
// 计算货仓到每个商店的距离
for (int i = 0; i < n; i++) {
distance_sum += abs(a[i] - a[n/2]);
}
printf("%lld\n", distance_sum);
return 0;
}
```
阅读全文