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

C++ प्रोग्राम: शब्द को पैलिंड्रोम पार्टीशन्स में विभाजित करने के तरीकों की संख्या खोजें


यहां हम एक C++ प्रोग्राम पर चर्चा करेंगे जो एक शब्द को इस तरह पार्टीशन करने के तरीकों की संख्या खोजता है कि प्रत्येक शब्द एक पैलिंड्रोम हो।

एल्गोरिदम

Begin
    शब्द को इनपुट के रूप में लें।
    function partitionadd(vector> &u, string &s, vector &tmp, int index):
        if (index == 0)
            tmp.clear()
        for i = index से length-1 तक
            st = st + s[i]
            if (checkPalin(st))
                tmp.push_back(st)
                if (i+1 < length)
                    partitionadd(u, s, tmp, i+1)
                else
                    u.push_back(tmp)
                tmp = curr
    return
End

function partition(string st, vector> &u):
    vector tmp
    addStrings(u, st, tmp, 0)
    printSol(u) // समाधान प्रिंट करने के लिए
    return
End

उदाहरण

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

bool checkPalin(string s) { // जांचें कि स्ट्रिंग पैलिंड्रोम है या नहीं
    int length = s.length();
    length--;
    for (int i = 0; i < length; i++) {
        if (s[i] != s[length])
            return false;
        length--;
    }
    return true;
}

void printSol(vector> part) { // समाधान प्रिंट करें
    for (int i = 0; i < part.size(); ++i) {
        for(int j = 0; j < part[i].size(); ++j)
            cout << part[i][j] << " ";
        cout << endl;
    }
    return;
}

void partitionadd(vector> &u, string &s, vector &tmp, int index) {
    int length = s.length(); // स्ट्रिंग की लंबाई स्टोर करें
    string st;
    vector curr = tmp;
    
    // सभी इंडेक्स के माध्यम से जाएं और रिकर्सिवली शेष पार्टीशन्स जोड़ें यदि वर्तमान स्ट्रिंग पैलिंड्रोम है
    if (index == 0)
        tmp.clear();
    
    for (int i = index; i < length; ++i) {
        st = st + s[i];
        if (checkPalin(st)) {
            tmp.push_back(st);
            if (i+1 < length)
                partitionadd(u, s, tmp, i+1);
            else
                u.push_back(tmp);
            tmp = curr;
        }
    }
    return;
}

void partition(string st, vector> &u) { // 'str' के सभी पैलिंड्रोमिक पार्टीशन्स जनरेट करें और परिणाम 'm' में स्टोर करें
    vector tmp;
    partitionadd(u, st, tmp, 0); // नोट: मूल कोड में addStrings था जो undefined था
    printSol(u);
    return;
}

int main() {
    string s = "tutorials";
    vector> part;
    cout << "the number of partitions:" << endl;
    partition(s, part);
    return 0;
}

आउटपुट

the number of partitions:
t u t o r i a l s
tut o r i a l s

यह प्रोग्राम बैकट्रैकिंग का उपयोग करके स्ट्रिंग के सभी संभावित पैलिंड्रोमिक पार्टीशन्स ढूंढता है। "tutorials" के लिए, यह दो पार्टीशन्स ढूंढता है: प्रत्येक कैरेक्टर अलग-अलग (सभी सिंगल कैरेक्टर्स पैलिंड्रोम होते हैं) और "tut" + बाकी सिंगल कैरेक्टर्स। ध्यान दें कि मूल कोड में `addStrings` फंक्शन कॉल था जो परिभाषित नहीं था - इसे `partitionadd` होना चाहिए।

  1. - C++ में A में N अंक जोड़ें ताकि प्रत्येक जोड़ के बाद यह B से विभाज्य हो

    यहां हम देखेंगे कि N अंकों को A के साथ जोड़कर एक संख्या कैसे उत्पन्न की जाए, और प्रत्येक चरण में नए अंक जोड़ते समय यह दूसरी संख्या B से विभाज्य हो। मान लीजिए हम 4 अतिरिक्त अंक जोड़कर एक 5-अंकीय संख्या बनाने जा रहे हैं। हम 7 से विभाज्यता की जांच करेंगे। संख्या 8 से शुरू होगी। तो पहले यह 4 को जोड़ेगा

  1. - C++ प्रोग्राम: दी गई स्ट्रिंग के क्रमचय (Permutations) की संख्या ज्ञात करना

    हम एक स्ट्रिंग के कैरेक्टर्स को अलग-अलग क्रम में व्यवस्थित कर सकते हैं। यहां हम देखेंगे कि दी गई स्ट्रिंग से कितने क्रमचय बनाए जा सकते हैं। हम जानते हैं कि यदि एक स्ट्रिंग abc है। इसमें तीन कैरेक्टर्स हैं; हम उन्हें 3! = 6 अलग-अलग तरीकों से व्यवस्थित कर सकते हैं। इसलिए n कैरेक्टर्स वाली स्ट्रिंग क

  1. - पायथन में बाइनरी स्ट्रिंग को तीन भागों में विभाजित करने के तरीकों की संख्या खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी स्ट्रिंग s है जिसे हम 3 गैर-खाली स्ट्रिंग्स s1, s2, s3 में विभाजित कर सकते हैं जैसे कि (s1 + s2 + s3 = s)। हमें उन तरीकों की संख्या ज्ञात करनी है जिनसे s को विभाजित किया जा सकता है ताकि s1, s2, और s3 में 1 अक्षरों की संख्या समान हो। उत्तर बहुत बड़ा हो सकता है इसलिए उत्त