Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में तीन अलग-अलग क्रमबद्ध सरणियों के लिए (max(A[i], B[j], C[k]) – min(A[i], B[j], C[k])) को न्यूनतम करें

अवधारणा

दिए गए तीन क्रमबद्ध सरणियों A, B, और C के संबंध में जो आवश्यक रूप से समान आकार के नहीं हैं, किसी भी ट्रिपलेट A[i], B[j], C[k] के अधिकतम और न्यूनतम संख्या के बीच न्यूनतम निरपेक्ष अंतर की गणना करें जैसे कि वे क्रमशः सरणियों A, B और C के अंतर्गत हैं, यानी minimize (max(A[i], B[j], C[k]) – min(A[i], B[j], C[k]))।

उदाहरण

इनपुट

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

आउटपुट

1

व्याख्या

जब हम A[i] = 6, B[j] = 7, C[k] = 7 चुनते हैं, तो हमें न्यूनतम अंतर मिलता है: max(A[i], B[j], C[k]) - min(A[i], B[j], C[k])) = |7-6| = 1

इनपुट

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

आउटपुट

1

व्याख्या

जब हम A[i] = 11, B[j] = 10, C[k] = 11 चुनते हैं, तो हमें न्यूनतम अंतर मिलता है: max(A[i], B[j], C[k]) - min(A[i], B[j], C[k])) = |11-10| = 1

विधि

सरणियों A, B और C में प्रत्येक के सबसे बड़े तत्वों से शुरू करें। प्रत्येक चरण में उत्तर को अपडेट करने के लिए एक चर ट्रैक करें।

प्रत्येक चरण के लिए, अंतर को कम करने का एकमात्र संभावित तरीका तीन तत्वों में से अधिकतम तत्व को कम करना है।

परिणामस्वरूप, इस चरण के लिए अधिकतम तत्व वाले सरणी में अगले सबसे बड़े तत्व पर जाएं और उत्तर चर को अपडेट करें।

इस चरण को तब तक दोहराएं जब तक कि अधिकतम तत्व वाली सरणी समाप्त न हो जाए।

C++ कार्यान्वयन

#include<bits/stdc++.h>
using namespace std;

int solve(int A1[], int B1[], int C1[], int i1, int j1, int k1) {
    int min_diff, current_diff, max_term;
    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])));
        if(current_diff < min_diff)
            min_diff = current_diff;
        max_term = max(A1[i1], max(B1[j1], C1[k1]));
        if(A1[i1] == max_term)
            i1 -= 1;
        else if(B1[j1] == max_term)
            j1 -= 1;
        else
            k1 -= 1;
    }
    return min_diff;
}

int main() {
    int D1[] = { 5, 8, 10, 15 };
    int E1[] = { 6, 9, 15, 78, 89 };
    int F1[] = { 2, 3, 6, 6, 8, 8, 10 };
    int nD = sizeof(D1) / sizeof(D1[0]);
    int nE = sizeof(E1) / sizeof(E1[0]);
    int nF = sizeof(F1) / sizeof(F1[0]);
    cout << solve(D1, E1, F1, nD-1, nE-1, nF-1);
    return 0;
}

आउटपुट

1
  1. - C++ में दो सॉर्ट की गई सरणियों को मर्ज करना

    समस्या कथन दो सॉर्ट की गई सरणियाँ दी गई हैं। दी गई दो सॉर्ट की गई सरणियों को एक में मर्ज करने के लिए एक फ़ंक्शन लिखें। Arr1[] = {10, 15, 17, 20} Arr2[] = {5, 9, 13, 19} Result[] = {5, 9, 10, 13, 15, 17, 19, 20} एल्गोरिदम 1. दोनों सरणियों को पार करें 1.1. यदि arr1[i] < arr2[j] 1.1.1. arr[

  1. - C++ में दो अलग-अलग सरणियों के तत्वों को तीसरी सरणी में वैकल्पिक रूप से मर्ज करना

    समस्या कथन दो सरणियाँ दी गई हैं, हमें दो सरणियों को इस तरह संयोजित करना है कि संयुक्त सरणी में पहली और दूसरी सरणी के वैकल्पिक तत्व हों। यदि एक सरणी में अतिरिक्त तत्व है, तो इन तत्वों को संयुक्त सरणी के अंत में जोड़ा जाना चाहिए। arr1[] = {10, 20, 30, 40} arr2[] = {-10, -20, -30, -40} result[] = {10,

  1. - पायथन में तीन अलग-अलग सॉर्टेड ऐरे से अधिकतम-न्यूनतम अंतर को न्यूनतम करें

    मान लीजिए हमारे पास तीन सॉर्टेड ऐरे A, B, और C हैं (ये अलग-अलग आकार के हो सकते हैं)। हमें किसी भी ट्रिपलेट (A[i], B[j], C[k]) के अधिकतम और न्यूनतम संख्या के बीच न्यूनतम निरपेक्ष अंतर की गणना करनी है जैसे कि वे क्रमशः ऐरे A, B और C से हों। इसलिए, यदि इनपुट A: [2, 5, 6, 9, 11], B: [7, 10, 16], C: [3,