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

C++ में 0 के रूप में अन्य बाइनरी स्ट्रिंग के साथ XOR वाले चक्रीय क्रमपरिवर्तन की गणना

हमें दो बाइनरी स्ट्रिंग्स के साथ दिया गया है, मान लें कि str_1 और str_2 जिसमें 1 और 0 का संयोजन है और कार्य सबसे पहले स्ट्रिंग str_1 से संभव विभिन्न क्रमपरिवर्तनों के "SET" सेट को बनाना है और फिर हम XOR संचालन करेंगे बाइनरी स्ट्रिंग str_2 के साथ सेट में तत्व और फिर जांचें कि एक्सओआर 0 लौटा रहा है या नहीं। यदि हाँ, तो मामले पर विचार करें अन्यथा इसे अनदेखा करें।

आइए उदाहरणों से समझते हैं।

उदाहरण के लिए

इनपुट - स्ट्रिंग str_1 ="1111", स्ट्रिंग str_2 ="1111"

आउटपुट - 0 के रूप में अन्य बाइनरी स्ट्रिंग के साथ XOR वाले चक्रीय क्रमपरिवर्तन की संख्या हैं:4

स्पष्टीकरण - हम स्ट्रिंग str_2 का उपयोग करके सेट बनाएंगे और सेट {1111} होगा। अब हम स्ट्रिंग str_1 और {1111} ^ "1111" =0 से बने सेट का उपयोग करके XOR संचालन करेंगे। चूंकि हमारे पास स्ट्रिंग str_2 में 4 समान तत्व हैं इसलिए हम 4 अलग-अलग क्रमपरिवर्तन बना सकते हैं इसलिए आउटपुट 4 है।

इनपुट - स्ट्रिंग str_1 ="1101", स्ट्रिंग str_2 ="1101"

आउटपुट - 0 के रूप में अन्य बाइनरी स्ट्रिंग के साथ XOR वाले चक्रीय क्रमपरिवर्तन की संख्या हैं:1

स्पष्टीकरण - हम स्ट्रिंग str_2 का उपयोग करके सेट बनाएंगे और सेट {1101, 1110, 1011, 0111} होगा। अब हम स्ट्रिंग str_1 और गठित सेट यानी

. का उपयोग करके XOR संचालन करेंगे

{1101} ^ 1101 =0

{1110} ^ 1101 0 के बराबर नहीं है

{1011} ^ 1101 0 के बराबर नहीं है

{0111} ^ 1101 0 के बराबर नहीं है

जैसा कि हम केवल एक 0 हासिल कर सकते हैं इसलिए गिनती 1 है।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • इनपुट दो बाइनरी स्ट्रिंग्स मान लें कि str_1 और str_2 और उन्हें आगे की प्रक्रिया के लिए साइकलिक_परम्यूटेशन() फ़ंक्शन में पास करें।
  • परिणाम को संग्रहीत करने के लिए एक अस्थायी चर बनाएं और str_2 को str_2 + str_2 के रूप में सेट करें और फिर str_2 को str_2.substr(0, str_2.size()-1) के रूप में सेट करें।
  • एक स्ट्रिंग प्रकार चर str बनाएँ और इसे str_1 और str_2 के संयोजन पर सेट करें और फिर स्ट्रिंग str की लंबाई की गणना करें। स्ट्रिंग की लंबाई की एक सरणी बनाएं str.
  • एक तर्क के रूप में फ़ंक्शन के लिए स्ट्रिंग str और सरणी पास करके फ़ंक्शन check() को कॉल करें।
  • समारोह के अंदर
    • दो वेरिएबल को प्रारंभ और समाप्त घोषित करें और उन्हें 0 पर सेट करें
    • स्ट्रिंग की लंबाई की गणना करें।
    • स्ट्रिंग -1 के लिए मैं से लंबाई तक के लिए लूप शुरू करें और जांचें कि क्या मैं अंत से बड़ा हूं तो मैं के रूप में शुरू करें और मैं के रूप में समाप्त करें। अब प्रारंभ करें जबकि अंत स्ट्रिंग की लंबाई से कम है और str[end-start] str[end] के बराबर है और अंत के मान को 1 से बढ़ाएं
    • अब arr[i] को अंत के रूप में सेट करें - अंत को 1 से शुरू करें और घटाएं
    • अन्यथा, एक अस्थायी चर अस्थायी बनाएं और इसे i के रूप में सेट करें - प्रारंभ करें और IF arr [temp] अंत से कम - i + 1 की जांच करें और फिर arr [i] को arr [temp] के रूप में सेट करें। इसके अलावा, i से शुरू करें और एक स्ट्रिंग की लंबाई से कम अंत शुरू करें और str [end-start] के रूप में str [end] फिर अंत को 1 से बढ़ाएं और arr [i] को अंत के रूप में सेट करें - अंत को 1 से शुरू करें और घटाएं ।
  • आरंभ लूप फॉर i से 1 तक स्ट्रिंग की लंबाई str -1 और जांचें कि IF arr[i] स्ट्रिंग की लंबाई str_1 के बराबर है, फिर गिनती को 1 से बढ़ाएँ
  • वापसी की संख्या
  • परिणाम प्रिंट करें

उदाहरण

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

void check(string str, int arr[]) {
   int start = 0, end = 0;
   int len = str.length();

   for (int i = 1; i <= len - 1; i++) {
      if (i > end) {
         start = i;
         end = i;
         while (end < len && str[end - start] == str[end]) {
            end++;
         }
         arr[i] = end - start;
         end--;
      } else {
         int temp = i - start;
         if (arr[temp] < end - i + 1) {
            arr[i] = arr[temp];
         } else {
            start = i;
            while (end < len && str[end - start] == str[end]) {
               end++;
            }
            arr[i] = end - start;
            end--;
         }
      }
   }
}

int cyclic_permutation(string str_1, string str_2) {
   int count = 0;
   str_2 = str_2 + str_2;
   str_2 = str_2.substr(0, str_2.size() - 1);

   string str = str_1 + "$" + str_2;
   int len = str.length();
   int arr[len];
   check(str, arr);

   for (int i = 1; i <= len - 1; i++) {
      if (arr[i] == str_1.length()) {
         count++;
      }
   }
   return count;
}
int main() {
   string str_1 = "1111";
   string str_2 = "1111";
   cout << "Count of cyclic permutations having XOR with other binary string as 0 are: " << cyclic_permutation(str_1, str_2);
   return 0;
}

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

आउटपुट

Count of cyclic permutations having XOR with other binary string as 0 are: 4

  1. सी ++ में ब्रैकेट के साथ स्ट्रिंग करने के लिए बाइनरी पेड़

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम एक प्रोग्राम बनाना है जो एक बाइनरी ट्री को C++ में ब्रैकेट के साथ स्ट्रिंग में बदल देगा। बाइनरी ट्री के मान पूर्णांक हैं और इसे प्रोग्राम को प्रीऑर्डर ट्रैवर्सिंग तरीके से फीड किया जाएगा। स्ट्रिंग में केवल पूर्णांक और कोष्ठक () होना चाहिए, इ

  1. C++ में वर्णों की पुनरावृत्ति के साथ सभी क्रमपरिवर्तन प्रिंट करें

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

  1. जांचें कि क्या बाइनरी स्ट्रिंग में C++ में लंबाई k के सभी क्रमपरिवर्तन हैं

    मान लीजिए कि हमारे पास एक बाइनरी स्ट्रिंग है, एक और पूर्णांक k है। हमें यह जांचना होगा कि स्ट्रिंग में k बिट्स के बाइनरी के सभी क्रमपरिवर्तन हैं। मान लीजिए कि एक स्ट्रिंग 11001 की तरह है, और यदि K =2 है, तो इसमें k बिट संख्याओं के सभी क्रमपरिवर्तन होने चाहिए। (00, 01, 10, 11), दिए गए स्ट्रिंग में सभ