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

Thu nhỏ (max (A [i], B [j], C [k]) - min (A [i], B [j], C [k])) của ba mảng được sắp xếp khác nhau trong C ++

Khái niệm

Đối với ba mảng được sắp xếp A, B và C đã cho có kích thước không nhất thiết phải giống nhau, hãy tính chênh lệch tuyệt đối nhỏ nhất, tức là nhỏ nhất giữa số lớn nhất và nhỏ nhất của bất kỳ bộ ba nào A [i], B [j], C [k] như vậy rằng chúng nằm dưới các mảng A, B và C tương ứng, tức là tối thiểu (max (A [i], B [j], C [k]) - min (A [i], B [j], C [k] )).

Đầu vào -

A : [ 2, 5, 6, 9, 11 ]
B : [ 7, 10, 16 ]
C : [ 3, 4, 7, 7 ]

Đầu ra -

1

Giải thích

Khi chúng ta chọn A [i] =6, B [j] =7, C [k] =7, chúng ta nhận được sự khác biệt nhỏ nhất là max (A [i], B [j], C [k]) - min ( A [i], B [j], C [k])) =| 7-6 | =1

Đầu vào -

A = [ 6, 9, 11, 16 ]
B = [ 7, 10, 16, 79, 90 ]
C = [ 3, 4, 7, 7, 9, 9, 11 ]

Đầu ra -

1

Giải thích -

Khi chúng ta chọn A [i] =11, b [j] =10, C [k] =11. chúng ta nhận được sự khác biệt nhỏ nhất là max (A [i], B [j], C [k]) - min ( A [i], B [j], C [k])) =| 11-10 | =1

Phương pháp

Bắt đầu với các phần tử cao nhất trong mỗi mảng A, B &C. Theo dõi một biến để cập nhật câu trả lời tại thời điểm của mỗi bước sẽ được làm theo.

Liên quan đến từng bước, cách duy nhất có thể để giảm bớt sự khác biệt là giảm phần tử tối đa trong số ba phần tử.

Do đó, hãy truy cập vào phần tử cao nhất tiếp theo trong mảng chứa phần tử tối đa cho bước này và cập nhật biến câu trả lời.

Chúng ta phải lặp lại bước này cho đến khi và trừ khi mảng chứa phần tử tối đa kết thúc.

Ví dụ (C ++)

// Mã C ++ cho phương pháp trên

#include<bits/stdc++.h>
usingnamespacestd;
intsolve(intA1[], intB1[], intC1[], inti1, intj1, intk1) {
intmin_diff, current_diff, max_term;
// calculating min difference from last
// index of lists
min_diff = abs(max(A1[i1], max(B1[j1], C1[k1]))
- min(A1[i1], min(B1[j1], C1[k1])));
while(i1 != -1 && j1 != -1 && k1 != -1) {
   current_diff = abs(max(A1[i1], max(B1[j1], C1[k1]))
   - min(A1[i1], min(B1[j1], C1[k1])));
   // checking condition
   if(current_diff < min_diff)
      min_diff = current_diff;
      // calculating max term from list
      max_term = max(A1[i1], max(B1[j1], C1[k1]));
      if(A1[i1] == max_term)
         i1 -= 1;
      elseif(B1[j1] == max_term)
         j1 -= 1;
      else
         k1 -= 1;
   }
   returnmin_diff;
}
intmain() {
   intD1[] = { 5, 8, 10, 15 };
   intE1[] = { 6, 9, 15, 78, 89 };
   intF1[] = { 2, 3, 6, 6, 8, 8, 10 };
   intnD = sizeof(D1) / sizeof(D1[0]);
   intnE = sizeof(E1) / sizeof(E1[0]);
   intnF = sizeof(F1) / sizeof(F1[0]);
   cout << solve(D1, E1, F1, nD-1, nE-1, nF-1);
   return0;
}

Đầu ra

1