เราได้รับอาเรย์จำนวนเต็ม เป้าหมายคือหาค่าสูงสุดของนิพจน์:
arr[j] - arr[i] + arr[l] - arr[k] โดย i < j < k < l
เราทำได้โดยวนลูปทุกตัวคำนวณนิพจน์ หากค่ามากที่สุดจนถึงตอนนั้น เก็บไว้และคืนค่าสุดท้าย
อินพุต
arr[] = {1, 2, 3, 4}
เอาต์พุต
Maximum value for above expression is: 2
คำอธิบาย − i=0, j=1, k=2, l=3 → 2-1+4-3 = 1+1 = 2
อินพุต
arr[] = {5, 5, 5, 5, 5}
เอาต์พุต
Maximum value for above expression is: 0
คำอธิบาย − ทุกค่าเท่ากัน ผลลัพธ์ = 0
วิธีการที่ใช้ในโปรแกรมด้านล่าง
- อาเรย์ a[] เก็บตัวเลข
- ฟังก์ชัน maximizeSum(int arr[], int n) คืนค่าสูงสุดของนิพจน์
- sum เก็บผลรวม arr[j]-arr[i] + arr[l]-arr[k]
- maxx = arr[0] เริ่มต้น
- ลูป 4 ชั้น: i=0..n-4, j=i+1..n-3, k=j+1..n-2, l=k+1..n-1
- คำนวณ sum = arr[j]-arr[i]+arr[l]-arr[k] อัปเดต maxx
- คืนค่า maxx
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int maximizeSum(int arr[], int n) {
int sum = 0;
int maxx = arr[0];
for (int i = 0; i < n-3; i++)
for (int j = i+1; j < n-2; j++)
for (int k = j+1; k < n-1; k++)
for (int l = k+1; l < n; l++) {
sum = arr[j] - arr[i] + arr[l] - arr[k];
if (sum >= maxx) maxx = sum;
}
return maxx;
}
int main() {
int a[] = {5, 3, 9, 2, 20};
int n = sizeof(a) / sizeof(a[0]);
cout << "Maximized value is: " << maximizeSum(a, n);
return 0;
}
ผลลัพธ์
Maximized value is: 24