Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

Cで負の値を持つセットの2つのサブセット間の差を最大化する


正と負の整数の配列が与えられます。タスクは、配列に存在する要素の正と負のサブセット間の最大差を見つけることです。正の数と負の数のサブセットがあるため。その場合、差(正の合計)-(負の合計)は常に最大になります。これは、ネガを引くとネガが加算されるためです。すべてのネガをポジティブに変換し、配列のすべての要素を追加すると、目的の結果が得られます。理解するための例を見てみましょう-

入力 − arr [] ={-2、0、-3、8、10、12、-4}

出力 − 2つのサブセット間の最大差− 39

説明 −正の整数のサブセット{0、8、10、12}の合計は30です

負の整数のサブセット{-2、-3、-4}の合計は-9です

最大差は30-(-9)=39

入力 − arr [] ={-5、-15、-3、-2、10、20、15}

出力 − 2つのサブセット間の最大差− 70

説明 −正の整数のサブセット{10、20、15}の合計は45

負の整数のサブセット{-5、-15、-3、-2}の合計は-25です

最大差は45-(-25)=70

以下のプログラムで使用されているアプローチは次のとおりです

  • 正と負の整数を持つ整数配列をArr[]

    とします。
  • 関数subsetDifference(int arr []、int n)は、負の整数と正の整数の2つのサブセット間の最大化された差を見つけることです。 2つの引数を取ります。1つは配列自体で、もう1つはそのサイズ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

  1. Androidで2つの日付の違いを取得するにはどうすればよいですか?

    この例は、Androidで2つの日付の違いを取得する方法を示しています。 ステップ1 − Android Studioで新しいプロジェクトを作成し、[ファイル]⇒[新しいプロジェクト]に移動して、新しいプロジェクトを作成するために必要なすべての詳細を入力します。 ステップ2 −次のコードをres / layout/activity_main.xmlに追加します。 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="https://sche

  2. 2つのリストの違いをリストするC#プログラム

    2つのリストの違いを取得するには、最初にC#で2つのリストを設定します- // first list List < string > list1 = new List < string > (); list1.Add("A"); list1.Add("B"); list1.Add("C"); list1.Add("D"); // second list List < string > list2 = new List < string > (); list2.Add