-9

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

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

我们可以在不改变总和的情况下将数组的元素增加或减少任意值。

为清楚起见,另一个示例:

给定数组[4,1,0],我们可以修改它,[2,1,2]使得最小的最大元素为 2。

4

1 回答 1

3

算法:

1:对所有数字求和 (26)

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

3:开始将此整数添加到新数组中,直到无法仅用四位填充数组的其余部分,然后开始添加五位(下一个整数)

// 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];
}
于 2013-04-06T07:31:44.753 回答