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

C++ प्रोग्राम: ठीक k तत्वों वाले सभी संभावित सबसेट उत्पन्न करना


यह C++ प्रोग्राम दिए गए सेट से ठीक k आकार के सभी संभावित सबसेट (उपसमुच्चय) उत्पन्न करता है। यह रिकर्सिव बैकट्रैकिंग का उपयोग करता है।

एल्गोरिदम

शुरुआत
  1. फंक्शन PossibleSubSet(char a[], int reqLen, int start, int currLen, bool check[], int len):
     - यदि currLen > reqLen तो लौटें
     - अन्यथा यदि currLen == reqLen तो नई जनरेटेड सीक्वेंस प्रिंट करें
     - यदि start == len तो लौटें (कोई और तत्व नहीं बचा)
     - प्रत्येक इंडेक्स के लिए दो विकल्प:
        * check[start] = true सेट करें और PossibleSubSet() को currLen+1 और start+1 के साथ रिकर्सिवली कॉल करें
        * check[start] = false सेट करें और PossibleSubSet() को केवल start+1 के साथ रिकर्सिवली कॉल करें
समाप्ति

उदाहरण कोड

#include <iostream>
using namespace std;

void PossibleSubSet(char a[], int reqLen, int start, int currLen, bool check[], int len) {
    if (currLen > reqLen) return;
    else if (currLen == reqLen) {
        cout << "\t";
        for (int i = 0; i < len; i++) {
            if (check[i] == true)
                cout << a[i] << " ";
        }
        cout << "\n";
        return;
    }
    if (start == len) return;
    
    check[start] = true;
    PossibleSubSet(a, reqLen, start + 1, currLen + 1, check, len);
    check[start] = false;
    PossibleSubSet(a, reqLen, start + 1, currLen, check, len);
}

int main() {
    int n, m;
    cout << "Enter the number of elements: ";
    cin >> n;
    
    char a[n];
    bool check[n];
    
    cout << "\n";
    for (int i = 0; i < n; i++) {
        cout << "Enter " << i+1 << " element: ";
        cin >> a[i];
        check[i] = false;
    }
    
    cout << "\nEnter the length of the subsets required: ";
    cin >> m;
    
    cout << "\nThe possible combinations of length " << m << " for the given array set:\n";
    PossibleSubSet(a, m, 0, 0, check, n);
    return 0;
}

आउटपुट

Enter the number of elements: 7
Enter 1 element: 7
Enter 2 element: 6
Enter 3 element: 5
Enter 4 element: 4
Enter 5 element: 3
Enter 6 element: 2
Enter 7 element: 1
Enter the length of the subsets required: 6

The possible combinations of length 6 for the given array set:
7 6 5 4 3 2
7 6 5 4 3 1
7 6 5 4 2 1
7 6 5 3 2 1
7 6 4 3 2 1
7 5 4 3 2 1
6 5 4 3 2 1

गणितीय पृष्ठभूमि: n तत्वों में से k तत्व चुनने के तरीकों की संख्या C(n,k) = n!/(k!(n-k)!) होती है। इस उदाहरण में C(7,6) = 7 कॉम्बिनेशन हैं।

  1. C++ में सरणी के एलिमेंट्स का गुणनफल C++ में सरणी के एलिमेंट्स का गुणनफल

    पूर्णांक एलिमेंट्स की एक सरणी दी गई है और कार्य सरणी के एलिमेंट्स को गुणा करना और प्रदर्शित करना है। उदाहरण इनपुट-: arr[]={1,2,3,4,5,6,7} आउटपुट-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 इनपुट-: arr[]={3, 4,6, 2, 7, 8, 4} आउटपुट-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 नीचे दिए गए प्रोग्राम में उपयोग किया गया द

  1. - C++ प्रोग्राम लंबाई M के N पासवर्ड जनरेट करने के लिए

    यह लंबाई M के N पासवर्ड जनरेट करने के लिए एक C++ प्रोग्राम है। एल्गोरिदम permutation() फंक्शन रैंडम पासवर्ड जनरेट करता है: आर्गुमेंट्स: पॉइंटर ऐरे a, कुल रैंडम नंबर्स m, पासवर्ड की लंबाई s। यदि m == s, तो सभी एलिमेंट्स प्रिंट करें। अन्यथा, i = m से s-1 तक: स्वैप a[m] और a[i] रिकर्सिवली per

  1. - C++ प्रोग्राम: दिए गए सेट के सभी सबसेट को लेक्सिकोग्राफिक ऑर्डर में जनरेट करें

    यह दिए गए सेट के सभी सबसेट को लेक्सिकोग्राफिक ऑर्डर में जनरेट करने का C++ प्रोग्राम है। यह एल्गोरिदम दिए गए ऐरे के सेट से प्रत्येक लंबाई के सभी संभावित संयोजन को बढ़ते क्रम में प्रिंट करता है। इस एल्गोरिदम की समय जटिलता O(n*(2^n)) है। एल्गोरिदम Begin    प्रत्येक लंबाई i के लिए GenAllSubse