在 C++ 中,最大化表示式 arr[j] – arr[i] + arr[l] – arr[k],其中 i < j < k < l


給定一個整數陣列。目標是最大化表示式的值:

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[] 儲存數字。

  • 函式 maximizeSum(int arr[], int n) 接收陣列及其長度 n 作為輸入,並返回 arr[j]-arr[i]+arr[l]-arr[k] 的最大值,其中 i

  • 變數 sum 用於儲存 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] 並將其儲存在 sum 中

  • 如果當前和 >= maxx,則更新 maxx。

  • 最後返回 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

更新於:2020年7月28日

424 次檢視

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告