ปัญหา
ในปัญหานี้ เราได้รับอาร์เรย์ 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