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

k-बिट संख्याओं के सभी संयोजन खोजें जिनमें n बिट सेट हों जहां 1 <= n <= k क्रमबद्ध क्रम में C++ में

मान लीजिए हमारे पास एक संख्या k है। k-बिट संख्याओं के सभी संभावित संयोजन खोजें जिनमें n सेट-बिट हों जहां 1 <= n <= k। परिणाम के रूप में हम पहले एक सेट बिट वाली सभी संख्याएं प्रिंट करेंगे, उसके बाद दो बिट सेट वाली संख्याएं, उस संख्या तक जहां सभी बिट सेट हों। यदि दो संख्याओं में समान संख्या में सेट बिट हैं, तो छोटी संख्या पहले आएगी। तो यदि k = 3, तो संख्याएं [001, 010, 100, 011, 101, 110, 111] होंगी।

यहां हम डायनामिक प्रोग्रामिंग दृष्टिकोण का उपयोग करेंगे ताकि 1 <= n <= k के साथ n सेट-बिट वाली k-बिट संख्याओं के सभी संभावित संयोजन खोज सकें। इस समस्या को दो भागों में भी विभाजित किया जा सकता है। हम लंबाई k के सभी संयोजन खोजेंगे जहां n संख्या में 1s होंगे, लंबाई k-1 के n ones वाले सभी संयोजनों को 0 से प्रीफिक्स करके और लंबाई k-1 के n-1 ones वाले सभी संयोजनों को 1 से प्रीफिक्स करके।

उदाहरण

#include <iostream>
#include <vector>
#define K 16
using namespace std;

vector<string> table[K][K];

void getCombinations(int k) {
    string str = "";
    for (int bit = 0; bit <= k; bit++) {
        table[bit][0].push_back(str);
        str = str + "0";
    }
    for (int bit = 1; bit <= k; bit++) {
        for (int n = 1; n <= bit; n++) {
            for (string str : table[bit - 1][n])
                table[bit][n].push_back("0" + str);
            for (string str : table[bit - 1][n - 1])
                table[bit][n].push_back("1" + str);
        }
    }
    for (int n = 1; n <= k; n++) {
        for (string str : table[k][n])
            cout << str << " ";
        cout << endl;
    }
}

int main() {
    int k = 4;
    getCombinations(k);
}

आउटपुट

0001 0010 0100 1000 0011 0101 0110 1001 1010 1100 0111 1011 1101 1110 1111

  1. - C++ प्रोग्राम: दिए गए सेट के सभी विशिष्ट उपसमुच्चय (subsets) ज्ञात करना

    यहां हम देखेंगे कि दिए गए सेट के सभी विशिष्ट उपसमुच्चय कैसे प्रदर्शित करें। इसलिए यदि सेट {1, 2, 3} है, तो उपसमुच्चय होंगे {}, {1}, {2}, {3}, {1, 2}, {2, 3}, {1, 3}, {1, 2, 3}। सभी उपसमुच्चयों के सेट को पावर सेट (power set) कहा जाता है। पावर सेट में 2n तत्व होते हैं। हम 0 से 2n (बहिष्कृत) तक लूप कर

  1. - C++ में n से कम या बराबर सभी फैक्टोरियल संख्याएं खोजें

    यहां हम देखेंगे कि n से कम या बराबर सभी फैक्टोरियल संख्याओं को कैसे प्रिंट किया जाए। एक संख्या N को फैक्टोरियल संख्या कहा जाता है यदि यह किसी धनात्मक संख्या का फैक्टोरियल है। इसलिए कुछ फैक्टोरियल संख्याएं हैं: 1, 2, 6, 24, 120। फैक्टोरियल संख्याओं को प्रिंट करने के लिए, हमें सीधे फैक्टोरियल खोजने क

  1. - C++ प्रोग्राम: मीडियन के निकटतम k नंबर खोजना

    यह C++ प्रोग्राम एक सेट S (n नंबर्स) के मीडियन (Median) के निकटतम k नंबर खोजता है। यह क्विकसॉर्ट द्वारा सॉर्टिंग के बाद मीडियन के दोनों ओर से निकटतम तत्व चुनता है। एल्गोरिदम शुरुआत 1. फंक्शन Partition() - हाई पर पिवट के आधार पर ऐरे पार्टीशन करें 2. फंक्शन QuickSort() - क्विकसॉर्ट एल्गोरिदम से