C++语言有一些细长的棍子的任务是修改棍子,使每个棍子的长度相同。 你可以加长或缩短每根棍子。两个操作的成本都是xx,其中xx是新长度和原始长度之间的差值。 最低总成本是多少? 输入 第一个输入行包含一个整数nn:棒的数量。 然后是nn个整数:p1,p2,…,pnp1,第2页,…,伪随机数: 棍子的长度。 输出 打印一个整数:最小总成本。 限制 1≤n≤2·105 1≤pi≤109 样品 输入副本输出副本 5. 2 3 1 5 2 5.
时间: 2024-02-25 17:54:20 浏览: 27
这道题可以使用贪心算法来解决。我们需要先计算出所有棍子的平均长度,然后对于每个棍子,计算它与平均长度的差值,然后将所有差值的绝对值相加即为最小总成本。
具体实现步骤如下:
1. 读入棒的数量和长度。
2. 计算所有棒的长度之和,并计算平均长度。
3. 对于每个棒,计算它与平均长度的差值,并将差值的绝对值累加到总成本中。
4. 输出总成本。
以下是 C++ 的实现代码:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
int sum = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
sum += a[i];
}
int avg = sum / n;
int cost = 0;
for (int i = 0; i < n; i++) {
cost += abs(a[i] - avg);
}
cout << cost << endl;
return 0;
}
```
注意,这里使用了 `vector` 容器来存储棒的长度,可以避免手动管理内存的问题。同时,使用了标准库函数 `abs` 来计算差值的绝对值。
相关问题
使用c++将100个数据放到二维数组中,要求有五组,且每组元素个数相同
好的,我可以帮你解决这个问题。
首先,我们需要定义一个二维数组,可以使用如下的语句:
```c++
int arr[5][20];
```
这个语句定义了一个包含5行20列的二维整型数组。现在我们需要将100个数据放到这个数组中,每组元素个数相同。我们可以使用两个循环来实现这个目标。第一个循环用于遍历二维数组的行,第二个循环用于遍历每行中的元素。
```c++
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 20; j++) {
arr[i][j] = i * 20 + j;
}
}
```
这个循环会遍历5行20列的数组,将每个元素设置为其在数组中的位置。例如,第一行的元素将会被设置为0到19,第二行的元素将会被设置为20到39,以此类推。
现在,你可以访问这个二维数组来获取其中的数据。例如,要获取第二行第三个元素,你可以使用如下的语句:
```c++
int value = arr[1][2];
```
这个语句会将第二行第三个元素的值赋给变量value。
希望这个回答能够帮助你解决问题!
C++数组中每个元素类型都相同吗、
是的,C 数组中每个元素的类型都必须相同。在声明数组时,需要指定数组中元素的数据类型,而且所有元素都必须是该类型,否则编译器会报错。例如,int 数组中每个元素的类型都是 int,而 char 数组中每个元素的类型都是 char。这是因为在内存中,数组中的所有元素都是连续存储的,编译器需要知道每个元素的大小,才能正确地计算每个元素在内存中的地址。