更改数组,使数组中的最大元素必须最小

时间:2013-04-06 07:26:33

标签: c++ arrays algorithm

我有一个数组[4,7,1,3,6,5],我需要对其进行转换,以使该转换数组中的最大元素必须最小。

因此,对于上面的示例,在不更改该数组的总和值的情况下,可以将数组转换为[4,4,4,4,5,5],因此答案将为5(最大元素最小)。

我们可以在不改变总和的情况下,通过任何值递增或递减数组的元素。

为清楚起见另一个例子:

给定数组[4,1,0],以便我们可以将其修改为[2,1,2],以便最小元素为2。

1 个答案:

答案 0 :(得分:3)

算法:

1:汇总所有数字(26)

2:将总和除以元素总数(26/6),然后将数字四舍五入到最接近的整数(4)

3:开始将这个整数添加到一个新数组,直到只用fours填充数组的其余部分,然后开始添加五个(下一个整数)

// Don'f forget #include <cmath> or <math.h>
int arr[], int N;

int answer[N];

int sum = 0;
for(int i = 0; i < N; i++) sum += arr[i];
int num = floor(sum / (double)N);

for(int i = 0; i < N; i++)
{
    if (sum == (N - i) * (num + 1)) answer[i] = num + 1;
    else answer[i] = num;
    sum -= answer[i];
}