Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 세 개의 정렬된 배열에서 가장 가까운 세 개의 요소 찾기

<시간/>

최대(|A[i] – B[i]|, |B[j] – C [k]|, |C[k] – A[i]|)가 최소화됩니다. 따라서 A =[1, 4, 10], B =[2, 15, 20] 및 C =[10, 12]인 경우 출력 요소는 10, 15, 10이며 이 세 가지는 A, B 및 C입니다.

A, B 및 C의 크기가 각각 p, q 및 r이라고 가정합니다. 이제 이 문제를 해결하려면 다음 단계를 따르세요. -

  • i :=0, j :=0 및 k :=0
  • 이제 i

  • A[i], B[j] 및 C[k]의 최소값과 최대값 찾기
  • 차이 계산 :=max(X, Y, Z) - min(A[i], B[j], C[k])
  • 결과가 현재 결과보다 작으면 새 결과로 변경
  • 최소값을 포함하는 배열의 포인터를 증가시킵니다.

예시

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

출력

Closest elements are: 10 15 10