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

หาค่าสูงสุดของ arr[j] - arr[i] + arr[l] - arr[k] โดย i < j < k < l ใน C++


เราได้รับอาเรย์จำนวนเต็ม เป้าหมายคือหาค่าสูงสุดของนิพจน์:

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