Computer >> Máy Tính >  >> Lập trình >> C ++

Phần tử mảng có tổng số chênh lệch tuyệt đối nhỏ nhất trong C ++?

Chương trình này nhằm tìm ra sự khác biệt tuyệt đối nhỏ nhất của mảng khi chúng ta có một mảng có phần tử riêng biệt.

Mảng là một vùng chứa các phần tử của cùng một kiểu dữ liệu. Độ dài của một mảng cần được xác định trước.

khác biệt tuyệt đối là giá trị tuyệt đối của sự khác biệt giữa hai số, tức là sự khác biệt sẽ luôn là số dương, các giá trị âm sẽ được chuyển đổi thành số dương.

Tổng của hiệu số tuyệt đối nhỏ nhất của mỗi nguyên tố phải được tìm thấy công thức tính hiệu số tuyệt đối nhỏ nhất là

Chênh lệch tuyệt đối nhỏ nhất (a) =min (abs (a - arr [j]));

trong đó 1 <=j <=n và j! =i, abs là giá trị tuyệt đối.

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

Giải thích

Giải pháp tối ưu là chọn x =3, tạo ra tổng

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

Thuật toán

  • Mảng đầu vào đã cho được sắp xếp.

  • chênh lệch tuyệt đối tối thiểu cho lần đầu tiên phần tử của mảng, được tính bằng phần tử mảng thứ hai.

  • chênh lệch tuyệt đối tối thiểu cho cuối cùng phần tử mảng, cũng được tính toán bằng cách sử dụng phần tử mảng cuối cùng thứ hai.

  • , chênh lệch tuyệt đối tối thiểu cho các phần tử mảng khác có mặt ở chỉ mục i được tính bằng:

  • minAbsDiff =min (abs (arr [i] - arr [i-1]), abs (ar [i] - arr [i + 1])).

Ví dụ

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

Đầu ra

The element with minimum sum of absolute differences is : 8