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

C++에서 절대 차이의 최소 합계가 있는 배열 요소?

<시간/>

이 프로그램은 고유한 요소가 있는 배열이 있는 경우 배열의 최소 절대 차이를 찾는 것입니다. 이 개념을 더 잘 배우기 위해 필요한 사항을 다시 살펴보겠습니다.

배열 동일한 데이터 유형의 요소 컨테이너입니다. 배열의 길이를 미리 정의해야 합니다.

절대적 차이 두 숫자 간의 차이의 절대값입니다. 즉, 차이는 항상 양수이고 음수 값은 양수로 변환됩니다.

각 원소의 최소 절대 차이의 합은 최소 절대 용질 차이 공식을 구해야 합니다.

최소 절대 차이(a) =min(abs(a – arr[j]));

여기서 1 <=j <=n 및 j !=i, abs 절대값입니다.

Input: arr = {1, 3, 9, 3, 6}
Output: 8

설명

최적의 솔루션은 합을 생성하는 x =3을 선택하는 것입니다.

|1 – 3| + |3 – 3| + |9 – 3| + |3 – 3| =2 + 0 + 6 + 0 =8

알고리즘

  • 주어진 입력 배열이 정렬됩니다.

  • 첫 번째에 대한 최소 절대 차이 배열의 요소는 두 번째 배열 요소를 사용하여 계산됩니다.

  • 마지막에 대한 최소 절대 차이 배열 요소도 마지막 두 번째 배열 요소를 사용하여 계산됩니다.

  • , 인덱스 i에 존재하는 다른 배열 요소에 대한 최소 절대 차이는 다음과 같이 계산됩니다.

  • minAbsDiff =min( abs(arr[i] – arr[i-1]), abs(ar[i] – arr[i+1]) ).

예시

#include<iostream>
#include <algorithm>
using namespace std;
int abs_sum(int a[], int len);
int main() {
   int a[]={1, 3, 9, 3, 6};
   int n, i;
   n=5;
   sort(a, a+n);
   int sum = 0;
   sum += abs(a[0]- a[1]);
   sum += abs(a[n-1]-a[n-2]);
   for (int i = 1; i < n-1; i++) {
      sum += min(abs(a[i]-a[i-1]), abs(a[i]-a[i+1]));
   }
   cout<<"The element with minimum sum of absolute differences is : "<<sum;
   return 0;
}

출력

The element with minimum sum of absolute differences is : 8