查找最小值以分配所有数组元素,以使数组乘积在C ++中变得更大

假设我们有一个n个元素的数组。将给定数组的所有元素更新为某个最小值x,以使arr [i] = x。这样,新数组中所有元素的乘积严格大于初始数组中所有元素的乘积,其中i <= arr [i] <= 10 ^ 10,而1 <= n <= 10 ^ 5。因此,如果数组类似于[4,2,1,10,6]。因此4是最小的元素。4 * 4 * 4 * 4 * 4> 4 * 2 * 1 * 10 * 6

我们知道n个元素的乘积是P。如果必须找到P的第n个根,要找到乘积的第n个根,我们只需将n从数组n个元素的对数之和除以antilog的上限即可将是结果。

res = ceil(对数(log(x)/ 10))

或res = ceil(10 ^(log(x)/ 10))

示例

#include <iostream>

#include <cmath>

#define EPS 1e-15

using namespace std;

long long findMinValue(long long arr[], long long n) {

   long double sum = 0;

   for (int i=0; i<n; i++)

   sum += (long double)log10(arr[i])+EPS;

   long double xl = (long double)(sum/n+EPS);

   long double res = pow((long double)10.0, (long double)xl) + EPS;

   return (long long)ceil(res+EPS);

}

int main() {

   long long arr[] = {4, 2, 1, 10, 6};

   long long n = sizeof(arr)/sizeof(arr[0]);

   cout << "Min value is: "<< findMinValue(arr, n);

}

输出结果

Min value is: 4

以上是 查找最小值以分配所有数组元素,以使数组乘积在C ++中变得更大 的全部内容, 来源链接: utcz.com/z/316598.html

回到顶部