C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で配列積が大きくなるように、すべての配列要素を割り当てるための最小値を見つけます


n個の要素の配列があるとします。指定された配列のすべての要素を、arr [i]=xとなるような最小値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を除算し、次に真数の上限を求めます。結果になります。

res =ceil(antilog(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

  1. C ++でa%b =kとなるような配列内のすべてのペア(a、b)を検索します

    配列Aがあるとすると、その配列から、a%b =kとなるようにすべてのペア(a、b)を取得する必要があります。配列がA=[2、3、4、5、7]、k =3であるとすると、ペアは(7、4)、(3、4)、(3、5)、(3、7)になります。 これを解決するために、リストをトラバースして、指定された条件が満たされているかどうかを確認します。 例 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) {    bool pairAvilable = true;

  2. C++で配列のすべての要素を同じにするための最小限の削除操作。

    問題の説明 要素が繰り返されるようなn個の要素の配列が与えられます。配列から任意の数の要素を削除できます。タスクは、配列から削除する要素の最小数を見つけて、配列を等しくすることです。 arr[] = {10, 8, 10, 7, 10, -1, -4, 12} すべての配列要素を同じにするには、強調表示された5つの要素を削除する必要があります。 アルゴリズム 1. Count frequency of each element 2. Find maximum frequecy among the frequencies. Let us call this as maxFrequncy 3.