首頁  >  文章  >  後端開發  >  最大化集合中負數的兩個子集之間的差異,在C中實現

最大化集合中負數的兩個子集之間的差異,在C中實現

WBOY
WBOY轉載
2023-08-25 14:49:13913瀏覽

最大化集合中負數的兩個子集之間的差異,在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
  • 如果當前元素是負數(
  • 將每個元素加到總和中。

  • 將總和作為可能的最大子集差異傳回。

範例

 示範

#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

以上是最大化集合中負數的兩個子集之間的差異,在C中實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除