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

C++ में दो शब्दकोश शब्दों के संयोजन का उपयोग कर शब्द निर्माण

इस समस्या में हमें एक शब्दकोष और एक शब्द दिया जाता है। हमारा काम यह जांचना है कि क्या दिए गए वर्र्स को दो शब्दकोष शब्दों के संयोजन का उपयोग करके बनाया जा सकता है।

दिए गए शब्दों को बनाते समय शब्दों की पुनरावृत्ति कानूनी नहीं है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

dictionary = {“hello”, “tutorials”, “program” , “problem”, “coding”, “point”} word = “tutorialspoint”

आउटपुट

yes

स्पष्टीकरण

tutorialspoint is created using tutorials and point.

इस समस्या को हल करने के लिए, हम डिक्शनरी के सभी तत्वों को एक उपसर्ग ट्री में संग्रहीत करेंगे जिसे आमतौर पर ट्री के रूप में जाना जाता है। और फिर शब्द के उपसर्ग को ट्री में खोजें, यदि पाया जाता है तो इसे दो भागों में विभाजित करें और शब्द के दूसरे भाग को खोजें। अगर यह पाया जाता है तो सही है और गलत है।

समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,

उदाहरण

#include<bits/stdc++.h>
using namespace std;
#define char_int(c) ((int)c - (int)'a')
#define SIZE (26)
struct TrieNode{
   TrieNode *children[26];
   bool isLeaf;
};
TrieNode *getNode(){
   TrieNode * newNode = new TrieNode;
   newNode->isLeaf = false;
   for (int i =0 ; i< 26 ; i++)
   newNode->children[i] = NULL;
   return newNode;
}
void insert(TrieNode *root, string Key){
   int n = Key.length();
   TrieNode * pCrawl = root;
   for (int i=0; i<n; i++){
      int index = char_int(Key[i]);
      if (pCrawl->children[index] == NULL)
         pCrawl->children[index] = getNode();
      pCrawl = pCrawl->children[index];
   }
   pCrawl->isLeaf = true;
}
int prefixSearch(struct TrieNode *root, string key){
   int pos = -1, level;
   struct TrieNode *pCrawl = root;
   for (level = 0; level < key.length(); level++){
      int index = char_int(key[level]);
      if (pCrawl->isLeaf == true)
         pos = level;
      if (!pCrawl->children[index])
         return pos;
      pCrawl = pCrawl->children[index];
   }
   if (pCrawl != NULL && pCrawl->isLeaf)
   return level;
}
bool isWordCreated(struct TrieNode* root, string word){
   int len = prefixSearch(root, word);
   if (len == -1)
      return false;
   string split_word(word, len, word.length()-(len));
   int split_len = prefixSearch(root, split_word);
   return (len + split_len == word.length());
}
int main() {
   vector<string> dictionary = {"tutorials", "program", "solving", "point"};
   string word = "tutorialspoint";
   TrieNode *root = getNode();
   for (int i=0; i<dictionary.size(); i++)
      insert(root, dictionary[i]);
   cout<<"Word formation using dictionary is ";
   isWordCreated(root, word)?cout<<"possible" : cout<<"not possible";
   return 0;
}

आउटपुट

Word formation using dictionary is possible

  1. C++ का प्रयोग करते हुए N भाज्यों के योग के अंतिम दो अंक ज्ञात कीजिए।

    यहां हम देखेंगे कि अंतिम दो अंक कैसे प्राप्त करें। एन फैक्टोरियल के योग का इकाई स्थान अंक और दहाई स्थान अंक। अतः यदि N =4 है, तो यह 1 होगा! + 2! +3! +4! =33. अतः इकाई का स्थान 3 और दस का स्थान 3 है। परिणाम 33 होगा। 10 के बाद, दस स्थान 0 रहेंगे। N =10 और अधिक के लिए, यह 00 होगा। हम भाज्य संख्याओं के

  1. सी ++ में लिंक्ड लिस्ट का उपयोग करके दो बहुपदों को जोड़ना।

    इस अवधारणा को बेहतर ढंग से समझने के लिए आइए सबसे पहले आवश्यक सभी बुनियादी सामग्री को ब्रश करें। लिंक की गई सूची एक डेटा संरचना है जो सूची के नोड में प्रत्येक तत्व को एक वस्तु के रूप में संग्रहीत करती है। प्रत्येक नोट में दो भाग डेटा होते हैं और अगले नोड से लिंक होते हैं। बहुपद एक गणितीय व्यंजक है

  1. दो कतारों का उपयोग करके स्टैक को लागू करने के लिए C++ प्रोग्राम

    स्टैक स्टैक जिसे LIFO के रूप में लागू किया जाता है, जहां सम्मिलन और विलोपन एक ही छोर से किया जाता है, ऊपर। दर्ज किया गया अंतिम तत्व पहले हटा दिया जाता है। स्टैक संचालन हैं - पुश (इंट डेटा) - शीर्ष पर सम्मिलन इंट पॉप () - ऊपर से हटाना कतार कतार जिसे फीफो के रूप में लागू किया जाता है जहां एक छोर