#include<iostream> using namespace std; void findClosest(int A[], int B[], int C[], int p, int q, int r) { int diff = 1000; // Initialize min diff // Initialize result int res_i =0, res_j = 0, res_k = 0; // Traverse arrays int i=0,j=0,k=0; while (i < p && j < q && k < r) { // Find minimum and maximum of current three elements int minimum = min(A[i], min(B[j], C[k])); int maximum = max(A[i], max(B[j], C[k])); // Update result if current diff is less than the min // diff so far if (maximum-minimum < diff) { res_i = i, res_j = j, res_k = k; diff = maximum - minimum; } // We can't get less than 0 as values are absolute if (diff == 0) break; // Increment index of array with smallest value if (A[i] == minimum) i++; else if (B[j] == minimum) j++; else k++; } // Print result cout << A[res_i] << " " << B[res_j] << " " << C[res_k]; } // Driver program int main() { int A[10] ; int B[10] ; int C[10] ; int p; int q; int r,i; scanf("%d",&p); for(i=0;i<p;i++) { scanf("%d",&A[i]) ; } scanf("%d",&q); for(i=0;i<q;i++) { scanf("%d",&B[i]) ; } scanf("%d",&r); for(i=0;i<r;i++) { scanf("%d",&C[i]) ; } findClosest(A, B, C, p, q, r); return 0; }
Problem Description
Find three closest elements from given three sorted arrays. Take the three sorted arrays and their sizes as input.
-
Test Case 1
Input (stdin)
3 1 4 10 3 2 15 20 2 10 12
Expected Output
10 15 10
-
Test Case 2
Input (stdin)
3 20 24 100 5 2 19 22 79 800 5 10 12 23 24 119
Expected Output
24 22 23