Computer >> Máy Tính >  >> Lập trình >> C ++

Tập hợp con sản phẩm tối đa của một mảng trong C ++

Trong hướng dẫn này, chúng ta sẽ thảo luận về một chương trình để tìm tập hợp con sản phẩm tối đa của anarray.

Đối với điều này, chúng ta sẽ được cung cấp một mảng chứa các giá trị âm và dương. Nhiệm vụ của chúng ta là tìm tích số tối đa cho một tập con của mảng.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int maxProductSubset(int a[], int n) {
   if (n == 1)
      return a[0];
      int max_neg = INT_MIN;
      int count_neg = 0, count_zero = 0;
      int prod = 1;
   for (int i = 0; i < n; i++) {
      //multiplying 0 is not useful
      if (a[i] == 0) {
         count_zero++;
         continue;
      }
      if (a[i] < 0) {
         count_neg++;
         max_neg = max(max_neg, a[i]);
      }
      prod = prod * a[i];
   }
   if (count_zero == n)
      return 0;
   if (count_neg & 1) {
      if (count_neg == 1 &&
         count_zero > 0 &&
         count_zero + count_neg == n)
         return 0;
      prod = prod / max_neg;
   }
   return prod;
}
int main() {
   int a[] = { -1, -1, -2, 4, 3 };
   int n = sizeof(a) / sizeof(a[0]);
   cout << maxProductSubset(a, n);
   return 0;
}

Đầu ra

24