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

समान योग वाले दोनों आधे भागों की लंबाई n की सभी संभावित बाइनरी संख्याएं

यहां हम n बिट (n उपयोगकर्ता द्वारा दिया गया) की सभी संभावित बाइनरी संख्याएं देखेंगे जहां प्रत्येक आधे का योग समान है। उदाहरण के लिए, यदि संख्या 10001 है तो यहां 10 और 01 समान हैं क्योंकि उनका योग समान है, और वे अलग-अलग आधे में हैं। यहां हम उस प्रकार की सभी संख्याएं उत्पन्न करेंगे।

एल्गोरिदम

genAllBinEqualSumHalf(n, left, right, diff)

left और right प्रारंभ में खाली हैं, diff बाएं और दाएं के बीच का अंतर रखता है।

शुरुआत
    यदि n 0 है, तो
        यदि diff 0 है, तो
            left + right प्रिंट करें
        यदि समाप्त
        वापस करें
    यदि समाप्त
    यदि n 1 है, तो
        यदि diff 0 है, तो
            left + 0 + right प्रिंट करें
            left + 1 + right प्रिंट करें
        यदि समाप्त
        वापस करें
    यदि समाप्त
    यदि 2*|diff| <= n, तो
        यदि left खाली नहीं है, तो
            genAllBinEqualSumHalf(n-2, left+0, right+0, diff)
            genAllBinEqualSumHalf(n-2, left+0, right+1, diff-1)
        यदि समाप्त
        genAllBinEqualSumHalf(n-2, left+1, right+0, diff+1)
        genAllBinEqualSumHalf(n-2, left+1, right+1, diff)
    यदि समाप्त
समाप्त

उदाहरण

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

void genAllBinEqualSumHalf(int n, string left="", string right="", int di=0) {
    if (n == 0) {
        if (di == 0)
            cout << left + right << " ";
        return;
    }
    if (n == 1) {
        if (di == 0) {
            cout << left + "0" + right << " ";
            cout << left + "1" + right << " ";
        }
        return;
    }
    if ((2 * abs(di) <= n)) {
        if (left != "") {
            genAllBinEqualSumHalf(n-2, left+"0", right+"0", di);
            genAllBinEqualSumHalf(n-2, left+"0", right+"1", di-1);
        }
        genAllBinEqualSumHalf(n-2, left+"1", right+"0", di+1);
        genAllBinEqualSumHalf(n-2, left+"1", right+"1", di);
    }
}

int main() {
    int n = 5;
    genAllBinEqualSumHalf(n);
    return 0;
}

आउटपुट

100001 100010 101011 110011 100100 101101 101110 110101 110110 111111
  1. दिए गए बाइनरी ट्री में सभी बाएं पत्तियों का योग ज्ञात करें C++ में दिए गए बाइनरी ट्री में सभी बाएं पत्तियों का योग ज्ञात करें C++ में

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है। हमारा कार्य दिए गए बाइनरी ट्री में सभी बाएं पत्तियों का योग ज्ञात करना है। उदाहरण से समझते हैं: इनपुट:  आउटपुट: 11 व्याख्या: ट्री के सभी पत्ती नोड्स हैं: 2, 9 योग = 2 + 9 = 11 समाधान दृष्टिकोण समस्या का एक सरल समाधान ट्री को रूट से पत्ती तक ट्रैवर

  1. C++ में सभी संभावित फुल बाइनरी ट्रीज़ C++ में सभी संभावित फुल बाइनरी ट्रीज़

    मान लीजिए एक फुल बाइनरी ट्री एक बाइनरी ट्री है जहां प्रत्येक नोड के ठीक 0 या 2 बच्चे होते हैं। इसलिए हमें N नोड्स वाले सभी संभावित फुल बाइनरी ट्रीज़ की सूची ढूंढनी है। उत्तर में प्रत्येक ट्री के प्रत्येक नोड का node.val = 0 होना चाहिए। लौटाए गए ट्री किसी भी क्रम में हो सकते हैं। यदि इनपुट 7 है, तो ट

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

    इस समस्या में, हमें एक बाइनरी ट्री दी गई है और हमें बाइनरी ट्री के सभी लीफ नोड्स को दाएं से बाएं प्रिंट करना है। उदाहरण इनपुट - आउटपुट - 7 4 1 इस समस्या को हल करने के लिए, हमें बाइनरी ट्री को पार करना होगा। यह ट्रैवर्सल दो तरीकों से किया जा सकता है - प्रीऑर्डर ट्रैवर्सल यह ट्रैवर्सल रिकर्सन का