Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

arr[j] – arr[i] + arr[l] – arr[k]를 최대화하여 C++에서 i
<시간/>

정수 배열이 제공됩니다. 목표는 표현의 가치를 극대화하는 것입니다 -

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

우리는 모든 요소를 ​​순회하고 expression의 값을 계산함으로써 그렇게 할 것입니다. 지금까지 찾은 것이 최대값이면 저장하고 마지막에 반환합니다.

입력

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을 입력으로 취하고 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]를 계산하고 합계에 저장

  • 현재 합계>=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