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

ผลคูณสูงสุดของควอดรูเปิล (เซิร์บซีเควลขนาด 4) ในอาร์เรย์ใน C++

ปัญหา

ในปัญหานี้ เราได้รับอาร์เรย์ arr[] งานของเราคือสร้างโปรแกรมเพื่อหาผลคูณสูงสุดของควอดรูเปิล (เซิร์บซีเควลขนาด 4) ในอาร์เรย์ใน C++

คำอธิบายโค้ด - ที่นี่ เราต้องหาควอดรูเปิล (เซิร์บซีเควลขนาด 4) ที่ทำให้ผลคูณของสมาชิกทั้งหมดเป็นสูงสุด

ตัวอย่าง

มาดูตัวอย่างเพื่อเข้าใจปัญหา

อินพุต

arr[] = {4, -2, 5, -6, 8}

เอาต์พุต

840

คำอธิบาย

ควอดรูเปิล (-3, 5, -7, 8) กับผลคูณ 840

วิธีแก้ปัญหา

สามารถมีวิธีแก้ปัญหาได้หลายวิธีสำหรับปัญหาที่กำหนด

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

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

โปรแกรมแสดงการทำงานของคำตอบของเรา

#include <iostream> 
using namespace std; 

int max(int a, int b){ 
    if(a > b) 
        return a; 
    return b; 
} 

int findMaxProdQuad(int arr[], int n){ 
    int maxProd = 0; 
    int prod = 1; 
    for (int i = 0; i <= n - 4; i++) 
        for (int j = i + 1; j <= n - 3; j++) 
            for (int k = j + 1; k <= n - 2; k++) 
                for (int l = k + 1; l <= n - 1; l++) { 
                    prod = arr[i] * arr[j] * arr[k] * arr[l]; 
                    maxProd = max(maxProd, prod); 
                    prod = 1; 
                } 
    return maxProd; 
} 

int main(){ 
    int arr[] = {4, -2, 5, -6, 8}; 
    int n = sizeof(arr) / sizeof(arr[0]); 
    cout<<"Maximum product of quadruple is "<<findMaxProdQuad(arr, n); 
    return 0; 
}

เอาต์พุต

Maximum product of quadruple is 480

อีกวิธีหนึ่งในการหาควอดรูเปิลที่มีผลคูณสูงสุดคือการหาสมาชิกสูงสุด 4 ตัวและสมาชิกต่ำสุด 4 ตัวของอาร์เรย์

สมมติว่า mx1, mx2, mx3, mx4 เป็นตัวเลขสูงสุด 4 ตัวแรก และ mn1, mn2, mn3, mn4 เป็นตัวเลขต่ำสุด 4 ตัวแรกของอาร์เรย์ จากนั้นหาค่าของ:

1. mx1 * mx2 * mx3 * mx4
2. mn1 * mn2 * mn3 * mn4
3. mx1 * mx2 * mn1 * mn2

และคืนค่าสูงสุดของผลคูณสามค่านี้ ซึ่งจะให้ควอดรูเปิลผลคูณสูงสุด และพิจารณากรณีทั้งหมด

ตัวอย่างโค้ด (วิธีที่ 2)

#include <iostream> 
using namespace std; 

int max(int a, int b){ 
    if(a > b) 
        return a; 
    return b; 
} 

int findMaxProdQuad(int arr[], int n) { 
    int mx1 = -1000, mx2 = -1000, mx3 = -10000, mx4 = -1000; 
    int mn1 = 1000, mn2 = 1000, mn3 = 1000, mn4 = 1000; 
    for (int i = 0; i < n; i++) { 
        if(arr[i] < mn1){ 
            mn4 = mn3; mn3 = mn2; mn2 = mn1; mn1 = arr[i]; 
        } else if(arr[i] < mn2){ 
            mn4 = mn3; mn3 = mn2; mn2 = arr[i]; 
        } else if(arr[i] < mn3){ 
            mn4 = mn3; mn3 = arr[i]; 
        } else if(arr[i] < mn4){ 
            mn4 = arr[i]; 
        } 
        if(arr[i] > mx1){ 
            mx4 = mx3; mx3 = mx2; mx2 = mx1; mx1 = arr[i]; 
        } else if(arr[i] > mx2){ 
            mx4 = mx3; mx3 = mx2; mx2 = arr[i]; 
        } else if(arr[i] > mx3){ 
            mx4 = mx3; mx3 = arr[i]; 
        } else if(arr[i] > mx4){ 
            mx4 = arr[i]; 
        } 
    } 
    int maxVal = max ((mx1 * mx2 * mx3 * mx4), (mn1 * mn2 * mn3 * mn4)); 
    maxVal = max(maxVal, (mx1 * mx2 * mn1 * mn2)); 
    return maxVal; 
} 

int main() { 
    int arr[] = {4, -2, 5, -6, 8}; 
    int n = sizeof(arr) / sizeof(arr[0]); 
    cout<<"Maximum product of quadruple is "<<findMaxProdQuad(arr, n); 
    return 0; 
}

เอาต์พุต

Maximum product of quadruple is 480

อีกวิธีหนึ่งคือการจัดเรียงอาร์เรย์ จากนั้นตัวเลขสูงสุด 4 ตัวและต่ำสุด 4 ตัวจะอยู่ที่ปลายและต้นของอาร์เรย์ตามลำดับ แล้วแก้เหมือนวิธีข้างต้นโดยหาค่าสูงสุดของสามชุดการผสมผสานของค่าสูงสุดและต่ำสุด

ตัวอย่างโค้ด (วิธีที่ 3 - เรียงลำดับ)

#include <bits/stdc++.h> 
using namespace std; 

int findMaxProdQuad(int arr[], int n){ 
    sort(arr, arr + n); 
    int maxVal = max((arr[n-1] * arr[n-2] * arr[n-3] * arr[n-4]), (arr[0] * arr[1] * arr[2] * arr[3])); 
    maxVal = max(maxVal, (arr[n-1] * arr[n-2] * arr[0] * arr[1])); 
    return maxVal; 
} 

int main(){ 
    int arr[] = {4, -2, 5, -6, 8}; 
    int n = sizeof(arr) / sizeof(arr[0]); 
    cout<<"Maximum product of quadruple is "<<findMaxProdQuad(arr, n); 
    return 0; 
}

เอาต์พุต

Maximum product of quadruple is 480