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

C에서 음수가 있는 집합의 두 하위 집합 간의 차이를 최대화합니다.


양수 및 음수 정수 배열이 제공됩니다. 작업은 배열에 있는 요소의 양수 및 음수 하위 집합 간의 최대 차이를 찾는 것입니다. 양수와 음수의 하위 집합이 있기 때문입니다. 그러면 차이(양수 합계) - (음수 합계)가 항상 최대가 됩니다. 마이너스를 빼면 더하기 때문입니다. 모든 음수를 양수로 변환하고 배열의 모든 요소를 ​​추가하면 원하는 결과가 생성됩니다. 이해를 위한 예를 살펴보겠습니다 -

입력 - Arr[] ={ -2, 0, -3, 8, 10, 12, -4 }

출력 − 두 하위 집합 간의 최대 차이 − 39

설명 − 양의 정수 부분집합 {0, 8,10,12} 합계는 30입니다.

음의 정수 부분집합 { -2, -3, -4 } 합계는 -9입니다.

최대 차이는 30 - (-9) =39입니다.

입력 - Arr[] ={ -5, -15, -3, -2, 10, 20, 15 }

출력 − 두 하위 집합 간의 최대 차이 − 70

설명 − 양의 정수 부분집합 { 10, 20, 15 } 합은 45입니다.

음의 정수 부분집합 { -5, -15, -3, -2 } 합계는 -25

최대 차이는 45 - (-25) =70입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 양의 정수와 음의 정수를 갖는 정수 배열을 Arr[]

    로 취합니다.
  • subsetDifference( int arr[],int n) 함수는 음수와 양수 정수의 두 부분집합 간의 최대 차이를 찾는 것입니다. 두 개의 인수를 취합니다. 하나는 배열 자체이고 다른 하나는 크기 n입니다.

  • 배열의 모든 요소의 합계를 저장하려면 변수 sum=0을 사용합니다.

  • 왼쪽에서 시작하여 for 루프( i=0;i를 사용하여 배열의 각 요소를 순회합니다.

  • 현재 요소가 음수(<0)이면 -1을 곱하여 양수를 만듭니다.( arr[i]=arr[i]*-1 )

  • 합계에 각 요소를 추가합니다.

  • 합계를 가능한 최대 하위 집합 차이로 반환합니다.

예시

#include <stdio.h>
int subsetDifference(int arr[], int n){
   int sum = 0;
   for (int i = 0; i < n; i++){
      if(arr[i]<0)
         arr[i]=arr[i]*-1;
      sum += arr[i];
   }
   return sum;
}
// Driver Code
int main(){
   int arr[] = { -1, 3, 5, 17, -32, 12 };
   int n = 6;
   printf("Maximized difference between subsets : %d", subsetDifference(arr, n));
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Maximized difference between two subsets: 70