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

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


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

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

उदाहरण के लिए

इनपुट -  string str_1 = "1111", string str_2 = "1111"

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

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

इनपुट -  string str_1 = "1101", string str_2 = "1101"

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

व्याख्या - हम string str_2 का उपयोग करके सेट बनाएंगे और सेट {1101, 1110, 1011, 0111} होगा। अब हम string str_1 और बने सेट का उपयोग करके XOR ऑपरेशन करेंगे यानी

{1101} ^ 1101 = 0

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

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

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

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

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

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

उदाहरण

#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++ में ब्रैकेट के साथ बाइनरी ट्री को स्ट्रिंग में बदलें C++ में ब्रैकेट के साथ बाइनरी ट्री को स्ट्रिंग में बदलें

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

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

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

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

    समस्या विवरण एक बाइनरी स्ट्रिंग और पूर्णांक k दिया गया है। जांचें कि स्ट्रिंग में k-बिट बाइनरी संख्याओं के सभी 2^k क्रमचय सबस्ट्रिंग के रूप में मौजूद हैं या नहीं। उदाहरण: str=11001, k=2 → आवश्यक: 00, 01, 10, 11 → सभी मौजूद हैं → YES एल्गोरिदम k लंबाई के सभी 2^k बाइनरी क्रमचय उत्पन्न करें प्रत्ये