Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

หาความต่างสูงสุดระหว่างสองเซตย่อยที่มีตัวเลขลบใน C

ได้รับอาร์เรย์จำนวนเต็มบวกและลบ หาความต่างสูงสุดระหว่างเซตย่อยบวกและลบ ความต่าง (sum positives) - (sum negatives) จะมากที่สุดเสมอ เพราะลบลบได้บวก แปลงลบเป็นบวกแล้วบวกทั้งหมดจะได้ผลลัพธ์

Input: Arr[] = { -2, 0, -3, 8, 10, 12, -4 }

Output: Maximized difference = 39

Explanation: positives {0,8,10,12} sum=30; negatives {-2,-3,-4} sum=-9; diff=30-(-9)=39

Input: Arr[] = { -5, -15, -3, -2, 10, 20, 15 }

Output: 70

Explanation: positives {10,20,15} sum=45; negatives {-5,-15,-3,-2} sum=-25; diff=45-(-25)=70

แนวทาง

  • รับอาร์เรย์ int Arr[]
  • ฟังก์ชัน subsetDifference(arr, n) คืนความต่างสูงสุด
  • ตัวแปร sum=0
  • วนลูป i=0 ถึง n-1
  • ถ้า arr[i] < 0 ให้คูณ -1 ทำให้เป็นบวก
  • บวกเข้า sum
  • คืนค่า sum

ตัวอย่างโค้ด

#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;
}

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