Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ผลคูณสูงสุดของเซิร์บเซ็ตในอาร์เรย์ใน C++

ปัญหา

ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมเพื่อหาผลคูณสูงสุดของเซิร์บเซ็ตในอาร์เรย์

สำหรับนี้ เราจะได้รับอาร์เรย์ที่มีค่าบวกและลบ งานของเราคือหาผลคูณสูงสุดสำหรับเซิร์บเซ็ตของอาร์เรย์

ตัวอย่างโค้ด

#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; 
}

เอาต์พุต

24