描述 暑假1v7w想要赚钱,于是就进入了美团大厂,成为了一名骑手。 这一天他抢到了 n个订单,这些订单的目的地都在宝鸡钢管路上(可以看做在一条坐标轴上),第 i个订单的目的地的位置是ai。 帮1v7w找一下,他最少走多长的距离就能够把外卖全部送完?这里他可以从任意一点开始送外卖,并从任意一点结束送外卖。 输入 第一行包含一个整数 n(2≤n≤100)。 第二行包含 n个整数, 第 i个整数为ai(0≤ai≤1000)。 输出1v7w把外卖送完所需要走动的最少距离 请使用c语言完成并给出代码
时间: 2024-02-13 07:59:46 浏览: 132
WinCC_V7_5_SP1
以下是使用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXN 105
int a[MAXN];
int cmp(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
qsort(a, n, sizeof(int), cmp);
int mid = n / 2;
if (n % 2 == 0) {
mid--;
}
int left = mid, right = mid + 1;
int ans = 0;
while (left >= 0 && right < n) {
ans += a[right] - a[left];
left--;
right++;
}
while (left >= 0) {
ans += a[mid] - a[left];
left--;
}
while (right < n) {
ans += a[right] - a[mid];
right++;
}
printf("%d\n", ans);
return 0;
}
```
解释一下代码:
首先读入n和n个订单的目的地位置,存储在数组a中。然后使用qsort函数对数组a进行排序。
计算中间点的位置mid,然后使用双指针left和right,从中间点开始向左和向右分别送外卖。每次移动left和right的位置时,计算走的距离并加到答案ans中。
如果left或right到达了数组的边界,则单独计算剩下的距离,并退出循环。
最后输出答案ans即可。
阅读全文