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

積のすべての繰り返し要素の頻度の合計がC++で2*k以下になるような配列からの最大積


このチュートリアルでは、積のすべての繰り返し要素の頻度の合計が2*k以下になるように配列から最大の積を見つけるプログラムについて説明します。

このために、配列と整数kが提供されます。私たちのタスクは、すべての桁の頻度の合計が2 * k以下でなければならない場合に、配列から最大の積を見つけることです。

#include <bits/stdc++.h>
using namespace std;
#define ll long long int
//returning maximum product value
ll maxProd(int arr[], int n, int k) {
   ll product = 1;
   unordered_map<int, int> s;
   sort(arr, arr + n);
   for (int i = 0; i < n; i++) {
      if (s[arr[i]] == 0) {
         product = product * arr[i];
      }
      //storing values in hash map
      s[arr[i]] = s[arr[i]] + 1;
   }
   for (int j = n - 1; j >= 0 && k > 0; j--) {
      if ((k > (s[arr[j]] - 1)) && ((s[arr[j]] - 1) > 0)){
         product *= pow(arr[j], s[arr[j]] - 1);
         k = k - s[arr[j]] + 1;
         s[arr[j]] = 0;
      }
      if (k <= (s[arr[j]] - 1) && ((s[arr[j]] - 1) > 0)) {
         product *= pow(arr[j], k);
         break;
      }
   }
   return product;
}
int main() {
   int arr[] = { 5, 6, 7, 8, 2, 5, 6, 8 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 2;
   cout << maxProd(arr, n, k);
   return 0;
}

出力

161280

  1. C++で2つの要素が隣接しないような循環配列の最大合計

    この問題では、循環配列cirArr[]が与えられます。私たちのタスクは、C++で2つの要素が隣接しないように循環配列の最大合計を見つけるプログラムを作成することです。 問題の説明 循環配列の場合、隣接する要素を取得できないように、配列の要素の最大合計を見つける必要があります。つまり、代替要素を取得する必要があります。 循環アレイ は、配列の最後の要素が最初の要素に接続されている特殊なタイプの配列です。 問題を理解するために例を見てみましょう 入力 cirArr[] = {4, 1, 5, 3, 2} 出力 9 説明 最大合計循環サブシーケンスは[4、5、2]です。合計=9 ソリ

  2. C++を使用してすべての要素が割り切れるような配列要素を見つけます

    要素が少ない配列Aがあるとします。すべての要素をそれで分割できるように、Aから要素を見つける必要があります。 Aが[15、21、69、33、3、72、81]のようであるとすると、すべての数値は3で割り切れる可能性があるため、要素は3になります。 この問題を解決するために、Aの最小の数値を取得し、すべての数値を最小の数値で除算できるかどうかを確認します。はいの場合は数値を返し、そうでない場合はfalseを返します。 例 #include<iostream> #include<algorithm> using namespace std; int getNumber(in