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

C++에서 배열의 최대 삼중항 합계


이 문제에서는 배열이 제공됩니다. 우리의 임무는 배열에서 최대 삼중항 합을 찾는 프로그램을 만드는 것입니다. 즉, 합이 최대인 세 개의 요소 집합을 찾는 것입니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력 - 배열 ={4, 6, 1, 2}

출력 − 12

설명 -

all triplets are :
(4, 6, 1) = 4+6+1 = 11
(4, 6, 2) = 4+6+1 = 12
(4, 1, 2) = 4+6+1 = 7
(6, 1, 2) = 4+6+1 = 9
The maximum triplet sum is 12

문제를 해결하기 위한 한 가지 간단한 접근 방식은 모든 삼중항 쌍에 대한 합계 값을 취한 다음 최대값을 찾는 예제에서 설명한 것입니다. 그러나 이 접근 방식은 모든 세 쌍의 길이가 커질수록 효과적이지 않습니다.

이 방법에서는 세 개의 루프를 실행하여 가능한 모든 합 삼중항을 찾고 이 삼중항의 합이 최대합보다 크면 이 삼중항 합을 최대합으로 초기화합니다.

예시

우리의 솔루션을 설명하는 프로그램,

#include <iostream>
using namespace std;
int maxSum(int arr[], int n){
   int maxSum = 0;
   int i, j, k;
   for (i = 0; i < n; i++)
      for (j = i + 1; j < n; j++)
         for (k = j + 1; k < n; k++)
            if (maxSum < arr[i] + arr[j] + arr[k]) maxSum = arr[i] + arr[j] + arr[k];
   return maxSum;
}
int main(){
   int arr[] = { 3, 5, 7 ,1, 9, 0 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum triplet sum of the array is "<<maxSum(arr, n);
   return 0;
}

출력

The maximum triplet sum of the array is 21

효과적인 접근 방식은 배열을 정렬한 다음 3중항의 최대 합이 될 배열의 마지막 세 요소의 합을 찾는 것입니다.

예시

솔루션을 설명하는 프로그램,

#include <bits/stdc++.h>
using namespace std;
int maxSum(int arr[], int n) {
   sort(arr, arr + n);
   return arr[n - 1] + arr[n - 2] + arr[n - 3];
}
int main() {
   int arr[] = { 3, 5, 9, 1, 2, 8, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum triplet sum of the array is "<<maxSum(arr, n);
   return 0;
}

출력

The maximum triplet sum of the array is 24