>백엔드 개발 >C++ >C++를 사용하여 i*arr를 최대화하도록 배열을 재정렬합니다.

C++를 사용하여 i*arr를 최대화하도록 배열을 재정렬합니다.

WBOY
WBOY앞으로
2023-08-30 15:13:04779검색

C++를 사용하여 i*arr를 최대화하도록 배열을 재정렬합니다.

이 글에서는 주어진 n개의 숫자 배열을 재배열하는 문제에 대해 논의하겠습니다. 기본적으로 배열에서 요소를 선택해야 합니다. 각 요소를 선택하기 위해 현재 요소의 값 * 현재 요소 이전에 선택된 요소 수로 평가되는 몇 가지 포인트를 얻습니다. 가장 높은 점수를 얻으려면 요소를 선택해야 합니다. 예를 들어 -

Input : arr[ ] = { 3, 1, 5, 6, 3 }

If we select the elements in the way it is given, our points will be
   = 3 * 0 + 1 * 1 + 5 * 2 + 6 * 3 + 3 * 4
   = 41
To maximize the points we have to select the elements in order { 1, 3, 3, 5, 6 }
   = 1 * 0 + 3 * 1 + 3 * 2 + 5 * 3 + 6 * 4
   = 48(maximum)

Output : 48

Input : arr[ ] = { 2, 4, 7, 1, 8 }
Output : 63

솔루션을 찾는 방법

이 예를 보면 최대점을 얻어야 하며 작은 것부터 큰 것까지 요소를 선택해야 합니다. 해결책은

  • 주어진 배열을 오름차순으로 정렬하여 찾을 수 있습니다.
  • 인덱스 0부터 끝까지 요소 선택을 시작하세요.
  • 각 요소를 선택하여 얻은 점수를 계산하세요.

#include <bits/stdc++.h>
#include <iostream>
using namespace std;

int main () {
   int arr[] = { 2, 4, 7, 1, 8 };
   int n = sizeof (arr) / sizeof (arr[0]);
   // sorting the array
   sort (arr, arr + n);

   int points = 0;
   // traverse the array and calculate the points
   for (int i = 0; i < n; i++) {
      points += arr[i] * i;
   }
   cout << "Maximum points: " << points;
   return 0;
}

Output

Maximum points: 63

위의 코드 설명

이 C++ 코드는 이해하기 쉽습니다. 먼저 배열을 정렬한 다음 for 루프를 사용하여 배열을 반복하고 처음부터 끝까지 각 요소를 선택하여 얻은 점수를 계산합니다.

결론

이 기사에서는 최대 점을 얻기 위해 배열에서 요소를 선택하는 문제에 대해 논의했습니다. 여기서 점은 i * arr[i]로 계산됩니다. 우리는 이 문제를 해결하고 최대 점수를 얻기 위해 탐욕스러운 접근 방식을 채택합니다. 또한 동일한 작업을 수행하기 위한 C++ 코드에 대해 논의하면 이 코드를 C, Java, Python 등과 같은 다른 언어로 작성할 수 있습니다. 이 기사가 도움이 되기를 바랍니다.

위 내용은 C++를 사용하여 i*arr를 최대화하도록 배열을 재정렬합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제