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

Tìm ba phần tử gần nhất từ ​​ba mảng đã sắp xếp trong C ++

Giả sử chúng ta có ba mảng được sắp xếp A, B và C, và ba phần tử i, j và k từ A, B và C tương ứng sao cho max (| A [i] - B [i] |, | B [j] - C [k] |, | C [k] - A [i] |) là cực tiểu. Vì vậy, nếu A =[1, 4, 10], B =[2, 15, 20] và C =[10, 12], thì các phần tử đầu ra là 10, 15, 10, ba phần tử này từ A, B và C.

Giả sử kích thước của A, B và C lần lượt là p, q và r. Bây giờ hãy làm theo các bước sau để giải quyết vấn đề này -

  • i:=0, j:=0 và k:=0
  • Bây giờ, hãy làm như sau trong khi i

  • Tìm giá trị tối thiểu và tối đa của A [i], B [j] và C [k]
  • Tính diff:=max (X, Y, Z) - min (A [i], B [j], C [k])
  • Nếu kết quả nhỏ hơn kết quả hiện tại, hãy thay đổi nó thành kết quả mới
  • Tăng con trỏ của mảng chứa giá trị nhỏ nhất.

Ví dụ

#include <iostream>
using namespace std;
void getClosestElements(int A[], int B[], int C[], int p, int q, int r) {
   int diff = INT_MAX;
   int i_final =0, j_final = 0, k_final = 0;
   int i=0,j=0,k=0;
   while (i < p && j < q && k < r) {
      int min_element = min(A[i], min(B[j], C[k]));
      int max_element = max(A[i], max(B[j], C[k]));
      if (max_element-min_element < diff){
         i_final = i, j_final = j, k_final = k;
         diff = max_element - min_element;
      }
      if (diff == 0)
         break;
      if (A[i] == min_element)
         i++;
      else if (B[j] == min_element)
         j++;
      else
         k++;
   }
   cout << A[i_final] << " " << B[j_final] << " " << C[k_final];
}
int main() {
   int A[] = {1, 4, 10};
   int B[] = {2, 15, 20};
   int C[] = {10, 12};
   int p = sizeof A / sizeof A[0];
   int q = sizeof B / sizeof B[0];
   int r = sizeof C / sizeof C[0];
   cout << "Closest elements are: ";
   getClosestElements(A, B, C, p, q, r);
}

Đầu ra

Closest elements are: 10 15 10