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

नट्स और बोल्ट्स समस्या


परिचय

विभिन्न नट्स की एक सूची और बोल्ट्स की एक अन्य सूची दी गई है। हमारा कार्य दी गई सूची से नट्स और बोल्ट्स के सही मिलान को ढूंढना है, और जब यह मेल खाता है तो उस नट को बोल्ट के साथ असाइन करना है।

यह समस्या क्विक-सॉर्ट तकनीक द्वारा हल की जाती है। बोल्ट के अंतिम तत्व को पिवट के रूप में लेकर, नट्स सूची को पुनर्व्यवस्थित करें और उस नट की अंतिम स्थिति प्राप्त करें जिसका बोल्ट पिवट तत्व है। नट्स सूची को पार्टीशन करने के बाद, हम चयनित नट का उपयोग करके बोल्ट्स सूची को पार्टीशन कर सकते हैं। बाएं और दाएं उप-सूचियों के लिए समान कार्य किए जाते हैं ताकि सभी मिलान प्राप्त हो सकें।

इनपुट और आउटपुट

इनपुट: लॉक्स और कीज़ की सूचियाँ।
nuts = { ),@,*,^,(,%, !,$,&,#}
bolts = { !, (, #, %, ), ^, &, *, $, @ }
आउटपुट: नट्स और बोल्ट्स के मिलान के बाद:
Nuts: ! # $ % & ( ) * @ ^
Bolts: ! # $ % & ( ) * @ ^

एल्गोरिदम

partition(array, low, high, pivot)

इनपुट: एक सरणी, निम्न और उच्च इंडेक्स, पिवट तत्व।

आउटपुट: पिवट तत्व की अंतिम स्थिति।

Begin
    i := low
    j के लिए रेंज low से high तक, करें
        यदि array[j] < pivot, तो
            array[i] और array[j] को स्वैप करें
            i को 1 से बढ़ाएं
        अन्यथा यदि array[j] = pivot, तो
            array[j] और array[high] को स्वैप करें
            j को 1 से घटाएं
    done
    array[i] और array[high] को स्वैप करें
    i लौटाएं
End

nutAndBoltMatch(nuts, bolts, low, high)

इनपुट: नट्स की सूची, बोल्ट्स की सूची, सरणी के निम्न और उच्च इंडेक्स।

आउटपुट: प्रदर्शित करें कि कौन सा नट किस बोल्ट के लिए है।

Begin
    pivotLoc := partition(nuts, low, high, bolts[high])
    partition(bolts, low, high, nuts[pivotLoc])
    nutAndBoltMatch(nuts, bolts, low, pivotLoc-1)
    nutAndBoltMatch(nuts, bolts, pivotLoc + 1, high)
End

उदाहरण (C++ कोड)

#include <iostream>
using namespace std;

void show(char array[], int n) {
    for (int i = 0; i < n; i++)
        cout << array[i] << " ";
}

int partition(char array[], int low, int high, char pivot) {
    // क्विक सॉर्ट के लिए पिवट का स्थान खोजें
    int i = low;
    for (int j = low; j < high; j++) {
        if (array[j] < pivot) {
            // जब jवां तत्व पिवट से कम हो, ith और jth तत्व को स्वैप करें
            swap(array[i], array[j]);
            i++;
        } else if (array[j] == pivot) {
            // जब jवां तत्व पिवट के समान हो, jth और अंतिम तत्व को स्वैप करें
            swap(array[j], array[high]);
            j--;
        }
    }
    swap(array[i], array[high]);
    return i; // पिवट तत्व का स्थान
}

void nutAndBoltMatch(char nuts[], char bolts[], int low, int high) {
    if (low < high) {
        int pivotLoc = partition(nuts, low, high, bolts[high]); // बोल्ट से नट पार्टीशनिंग के लिए आइटम चुनें
        partition(bolts, low, high, nuts[pivotLoc]); // पिछले पिवट स्थान को बोल्ट में भी रखें
        nutAndBoltMatch(nuts, bolts, low, pivotLoc - 1);
        nutAndBoltMatch(nuts, bolts, pivotLoc+1, high);
    }
}

int main() {
    char nuts[] = {')','@','*','^','(','%','!','$','&','#'};
    char bolts[] = {'!','(','#','%',' )','^','&','*','$','@'};
    int n = 10;
    nutAndBoltMatch(nuts, bolts, 0, n-1);
    cout << "After matching nuts and bolts:" << endl;
    cout << "Nuts: "; show(nuts, n); cout << endl;
    cout << "Bolts: "; show(bolts, n); cout << endl;
}

आउटपुट

After matching nuts and bolts:
Nuts: ! # $ % & ( ) * @ ^
Bolts: ! # $ % & ( ) * @ ^
  1. RAM समस्याओं को पहचानें और हल करें: लक्षण, निदान और सुधार RAM समस्याओं को पहचानें और हल करें: लक्षण, निदान और सुधार

    यह आर्टिकल आपके कंप्यूटर के सबसे महत्वपूर्ण घटकों में से एक के बारे में जानने के लिए आवश्यक सभी जानकारी को कवर करता है जिसे रैंडम एक्सेस मेमोरी या RAM के नाम से जाना जाता है। हम ब्लॉग में निम्नलिखित विषयों को कवर करेंगे। बिना किसी देरी के, आइए शुरू करें! RAM क्या है? RAM या रैंडम एक्सेस मेमोरी किस

  1. क्रोम का अप्रत्याशित डेस्कटॉप आइकन रिफ्रेश: कारण और समाधान क्रोम का अप्रत्याशित डेस्कटॉप आइकन रिफ्रेश: कारण और समाधान

    यह एक अजीब छोटी समस्या है जिसका आप सामना कर सकते हैं - या पढ़ सकते हैं - थोड़ी देर में। मेरी एक विंडोज मशीन पर, मैंने एक अजीब घटना देखी। हर बार जब मैं गूगल क्रोम (लिखे जाने पर नवीनतम संस्करण) लॉन्च करता, ब्राउज़र बंद करता, या - सबसे अच्छा - जीमेल खाते में साइन इन या आउट करता, मेरे सभी डेस्कटॉप आइकन

  1. विंडोज 10, 8.1, और 7 में 100% डिस्क उपयोग को हल करें - 5 सिद्ध सुधार विंडोज 10, 8.1, और 7 में 100% डिस्क उपयोग को हल करें - 5 सिद्ध सुधार

    यदि आप विंडोज 10 अपडेट इंस्टॉल करने के बाद विंडोज 10 को अच्छा प्रदर्शन नहीं करते हुए अनुभव करते हैं, जैसे सिस्टम स्टार्टअप पर फ्रीज होता है या एप्लिकेशन आपके क्लिक का जवाब नहीं देते। और टास्क मैनेजर पर जांच करने पर आप पा सकते हैं कि आपका सिस्टम ड्राइव 100 पर चल रहा है, जो ऑपरेटिंग सिस्टम को धीमा कर