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

C++ में दी गई अंक श्रृंखला के संभावित डिकोडिंग की गिनती


हमें एक स्ट्रिंग दी गई है जो अंक श्रृंखला को दर्शाती है। प्रत्येक अंक को 1 से 26 तक अंग्रेजी वर्णमाला के रूप में डिकोड किया जाता है। 1 'A' है, 2 'B' है और इसी तरह 26 'Z' है। लक्ष्य दी गई अंक श्रृंखला से सभी संभावित डिकोडिंग की संख्या ज्ञात करना है। यदि श्रृंखला '123' है तो संभावित डिकोडिंग हैं 'ABC' (1-2-3), 'LC' (12-3), 'AW' (1-23)। गिनती 3 है।

उदाहरण सहित समझ

इनपुट - str[]="1532"

आउटपुट - दी गई अंक श्रृंखला के संभावित डिकोडिंग की संख्या: 2

व्याख्या - संभावित डिकोडिंग हैं AECB - (1-5-3-2) और OCB (15-3-2)।

इनपुट - str[]="216"

आउटपुट - दी गई अंक श्रृंखला के संभावित डिकोडिंग की संख्या: 3

व्याख्या - संभावित डिकोडिंग हैं "BAF" (2-1-6), "UF" (21-6), "BP" (2-16)।

प्रोग्राम में उपयोग किया गया दृष्टिकोण

हम इसे एक रिकर्सिव विधि का उपयोग करके करेंगे। इस रिकर्सिव विधि को स्ट्रिंग के भाग पास करें।

जांचें कि अंतिम अंक '0' नहीं है, यदि सही है, तो 0 और लंबाई-1 के बीच की शेष स्ट्रिंग जांचें। जांचें कि अंतिम दो अंकों का स्ट्रिंग भाग 1 और 26 के बीच की संख्या बनाता है या नहीं। यदि सही है, तो काउंट अपडेट करें और 0 और लंबाई-2 के बीच की शेष स्ट्रिंग जांचें।

  • इनपुट को स्ट्रिंग str[] के रूप में लें।
  • फंक्शन decode_digit_seq(char *str, int length) स्ट्रिंग और इसकी लंबाई लेता है और str के संभावित डिकोडिंग की गिनती लौटाता है।
  • यदि लंबाई 0 है। 1 लौटाएँ।
  • यदि लंबाई 1 है। 1 लौटाएँ।
  • यदि अंतिम एकल वर्ण गैर-शून्य है, तो काउंट decode_digit_seq(str, length-1) होगा।
  • यदि अंतिम से दूसरा वर्ण '1' है तो अंतिम दो अंक 10 और 19 (J से S) के बीच होंगे, काउंट को अपडेट करें: count = count + decode_digit_seq(str, length-2)।
  • यदि अंतिम से दूसरा वर्ण '2' है और अंतिम वर्ण '<7' है तो अंतिम दो अंक 20 और 26 (T से Z) के बीच होंगे, काउंट को अपडेट करें: count = count + decode_digit_seq(str, length-2)।
  • अब सभी मामले कवर हो गए हैं।
  • अंत में सभी रिकर्सन के बाद परिणाम के रूप में काउंट लौटाएँ।

उदाहरण

#include <iostream>
#include <cstring>
using namespace std;

int decode_digit_seq(char *str, int length) {
    int count = 0;
    if (length == 0) {
        return 1;
    }
    if (length == 1) {
        return 1;
    }
    if (str[0] == '0') {
        return 0;
    }
    if (str[length-1] > '0') {
        count = decode_digit_seq(str, length-1);
    }
    if (str[length-2] == '1') {
        count = count + decode_digit_seq(str, length-2);
    }
    if (str[length-2] == '2' && str[length-1] < '7') {
        count = count + decode_digit_seq(str, length-2);
    }
    return count;
}

int main() {
    char str[] = "7651";
    int length = strlen(str);
    cout << "Count of Possible Decodings of a given Digit Sequence are: " << decode_digit_seq(str, length);
    return 0;
}

आउटपुट

Count of Possible Decoding of a given Digit Sequence are: 1
  1. ग्रिड में दी गई दिशा में संभावित चालों की गणना करने का C++ प्रोग्राम ग्रिड में दी गई दिशा में संभावित चालों की गणना करने का C++ प्रोग्राम

    समस्या विवरण हमें n x m आकार का ग्रिड और प्रारंभिक बिंदु (x, y) दिया गया है। साथ ही चालों/कदमों के जोड़े दिए गए हैं जैसे (1,1), (2,2) आदि। प्रत्येक जोड़ा x और y अक्ष में कदम की इकाइयों को दर्शाता है। लक्ष्य ग्रिड की सीमाओं [1,n] x [1,m] के भीतर ली जा सकने वाली कुल चालों की संख्या ज्ञात करना है। उदा

  1. - दी गई स्ट्रिंग से लंबाई n के उपस्ट्रिंग्स की गणना - C++

    समस्या विवरण हमें एक स्ट्रिंग str और एक संख्या n दी गई है। लक्ष्य str के उन सभी उपस्ट्रिंग्स को खोजना है जिनकी लंबाई n है। उदाहरण इनपुट: str = computer, n = 4 आउटपुट: 5 व्याख्या: उपस्ट्रिंग्स: comp, ompu, mput, pute, uter इनपुट: str = development, n = 5 आउटपुट: 7 व्याख्या: उपस्ट्रिंग्स: devel, eve

  1. C++ में दिए गए आकार के आयत के अंदर संभावित समचतुर्भुजों की संख्या गिनना C++ में दिए गए आकार के आयत के अंदर संभावित समचतुर्भुजों की संख्या गिनना

    हमें ऊंचाई × चौड़ाई आयामों वाला एक आयत दिया गया है। आयत को 2D निर्देशांक प्रणाली पर दर्शाया गया है जिसका निचला-बायाँ कोना बिंदु (0,0) पर है। लक्ष्य इस आयत के अंदर संभावित समचतुर्भुजों की संख्या गिनना है जो निम्न शर्तों को पूरा करते हैं: समचतुर्भुज का क्षेत्रफल 0 से अधिक हो। समचतुर्भुज के व