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

โปรแกรม C++ หาผลรวมความต่างสัมบูรณ์ต่ำสุดของสมาชิกอาร์เรย์


โปรแกรมนี้หาผลรวมความต่างสัมบูรณ์ต่ำสุดของอาร์เรย์ที่มีสมาชิกไม่ซ้ำกัน เริ่มจากทบทวนแนวคิดที่จำเป็น:

  • อาร์เรย์ (Array) — ตู้เก็บข้อมูลชนิดเดียวกัน ความยาวต้องกำหนดไว้ล่วงหน้า
  • ความต่างสัมบูรณ์ (Absolute Difference) — ค่าสัมบูรณ์ของความต่างระหว่างสองจำนวน (ค่าบวกเสมอ)

สูตรความต่างสัมบูรณ์ต่ำสุดของแต่ละสมาชิก:

Minimum Absolute Difference (a) = min(abs(a – arr[j])) โดยที่ 1 ≤ j ≤ n และ j ≠ i

Input: arr = {1, 3, 9, 3, 6} Output: 8

คำอธิบาย

คำตอบที่ดีที่สุดคือเลือก x = 3 ซึ่งให้ผลรวม:

|1 – 3| + |3 – 3| + |9 – 3| + |3 – 3| = 2 + 0 + 6 + 0 = 8

อัลกอริทึม

  • เรียงลำดับอาร์เรย์ที่รับเข้ามา
  • ความต่างสัมบูรณ์ต่ำสุดของ สมาชิกแรก คำนวณจากสมาชิกที่สอง
  • ความต่างสัมบูรณ์ต่ำสุดของ สมาชิกสุดท้าย คำนวณจากสมาชิกลำดับก่อนสุด
  • สำหรับสมาชิกอื่นๆ ที่อยู่ดัชนี i คำนวณจาก: minAbsDiff = min( abs(arr[i] – arr[i-1]), abs(arr[i] – arr[i+1]) )

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

#include<iostream>
#include <algorithm>
using namespace std;

int abs_sum(int a[], int len);

int main() {
    int a[]={1, 3, 9, 3, 6};
    int n, i;
    n=5;
    sort(a, a+n);
    int sum = 0;
    sum += abs(a[0]- a[1]);
    sum += abs(a[n-1]-a[n-2]);
    for (int i = 1; i < n-1; i++) {
        sum += min(abs(a[i]-a[i-1]), abs(a[i]-a[i+1]));
    }
    cout<<"The element with minimum sum of absolute differences is : "<<sum;
    return 0;
}

ผลลัพธ์

The element with minimum sum of absolute differences is : 8