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 loop ( 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