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

เพิ่ม arr[j] – arr[i] + arr[l] – arr[k] ให้ใหญ่สุด ดังนั้น i

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

arr[j]-arr[i] + arr[l]-arr[k]; i

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

อินพุต

arr[]= { 1,2,3,4 }

ผลลัพธ์

Maximum value for above expression is : 2

คำอธิบาย − สำหรับ i

arr[j]-arr[i]+arr[l]-arr[k]=2-1+4-3=1+1=2

อินพุต

arr[]= { 5,5,5,5,5 }

ผลลัพธ์

Maximum value for above expression is : 0

คำอธิบาย − สำหรับ i

arr[j]-arr[i]+arr[l]-arr[k]=5-5+5-5=0

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • อาร์เรย์จำนวนเต็ม a[] เก็บตัวเลข

  • ฟังก์ชัน maximumSum(int arr[], int n) รับอาร์เรย์และความยาว n เป็นอินพุตและส่งกลับค่าสูงสุดของ arr[j]-arr[i]+arr[l]-arr[k] เพื่อให้ i

  • ผลรวมตัวแปรใช้เพื่อเก็บผลรวมของ arr[j]-arr[i] และ arr[l]-arr[k].

  • เริ่มต้น maxx=arr[0] เป็นผลรวมสูงสุดเริ่มต้น

  • อาร์เรย์การเคลื่อนที่จาก i=0, j=1,k=2, l=3 ถึง i

  • สำหรับแต่ละดัชนีใน i,j,k,l คำนวณ arr[j]-arr[i]+arr[l]-arr[k] และเก็บไว้ในผลรวม

  • หากผลรวมปัจจุบัน>=maxx อัปเดตสูงสุด

  • ในที่สุดผลตอบแทนสูงสุดตามผลลัพธ์ที่ต้องการ

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
// function to maximize the sum of selected numbers
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