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

बाइनरी स्ट्रिंग को वैकल्पिक बनाने के लिए फ़्लिप की संख्या - C++ में 1 सेट करें

मान लीजिए कि आपने एक बाइनरी स्ट्रिंग "10011" दी है। एक वैकल्पिक बाइनरी स्ट्रिंग बनाने के लिए, हमें कम से कम 2 वर्णों को "10101" के रूप में फ़्लिप करना होगा।

वैकल्पिक स्ट्रिंग के लिए दो संभावनाएं हैं। यह 0 या 1 से शुरू होगा। हम दो विकल्पों की जाँच करेंगे और दोनों के लिए आवश्यक फ़्लिप की संख्या की गणना करेंगे।

और फिर दोनों का न्यूनतम वापस करें। आइए एक उदाहरण देखें।

इनपुट

binary = "10011"

आउटपुट

2

अगर हम स्ट्रिंग को 0 से शुरू करते हैं, तो हमें 3 बार फ्लिप करना होगा। और अगर हम स्ट्रिंग को 1 से शुरू करते हैं, तो हमें 2 बार पलटना होगा। न्यूनतम 2 है।

एल्गोरिदम

  • बाइनरी स्ट्रिंग को इनिशियलाइज़ करें।
  • 1 से शुरू करके स्ट्रिंग को वैकल्पिक बनाने के लिए आवश्यक फ़्लिप की गणना करें।
  • इसी तरह 0 से शुरू होने वाले स्ट्रिंग को वैकल्पिक बनाने के लिए आवश्यक फ़्लिप की गणना करें।
  • उपरोक्त दो में से न्यूनतम ज्ञात कीजिए।
  • न्यूनतम प्रिंट करें।

कार्यान्वयन

C++ में उपरोक्त एल्गोरिथम का कार्यान्वयन निम्नलिखित है

#include <bits/stdc++.h>
using namespace std;
char flip(char binaryDigit) {
   return binaryDigit == '0' ? '1' : '0';
}
int getFlipCountToAlternateString(string binary, char expected) {
   int flipCount = 0;
   for (int i = 0; i < binary.length(); i++) {
      if (binary[i] != expected) {
         flipCount++;
      }
      expected = flip(expected);
   }
   return flipCount;
}
int main() {
   string binary = "10011";
   cout << min(getFlipCountToAlternateString(binary, '0'), getFlipCountToAlternateString(binary,       '1')) << endl;
   return 0;
}

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।

2

  1. C++ में बाइनरी मैट्रिक्स को ज़ीरो मैट्रिक्स में बदलने के लिए फ़्लिप की न्यूनतम संख्या

    मान लीजिए हमारे पास एक m x n बाइनरी मैट्रिक्स मैट है। एक चरण में, हम एक सेल चुन सकते हैं और उसके बिट को फ्लिप कर सकते हैं और यदि वे मौजूद हैं तो उसके चारों पड़ोसी। हमें मैट को शून्य मैट्रिक्स में बदलने के लिए आवश्यक न्यूनतम चरणों की संख्या ज्ञात करनी होगी। अगर कोई समाधान नहीं है, तो -1 लौटें। इसलिए

  1. जांचें कि क्या किसी संख्या में वैकल्पिक पैटर्न में बिट्स हैं - C++ में 1 सेट करें

    आइए मान लें कि हमारे पास एक पूर्णांक n है। समस्या यह जांचना है कि क्या इस पूर्णांक के बाइनरी समकक्ष में वैकल्पिक पैटर्न हैं या नहीं। वैकल्पिक पैटर्न का अर्थ है 101010…. दृष्टिकोण इस प्रकार है:बाइनरी समकक्ष का उपयोग करके प्रत्येक अंक की जांच करें, और यदि लगातार दो समान हैं, तो झूठी वापसी करें, अन्यथ

  1. C++ में k सेट बिट्स के साथ किसी संख्या को अधिकतम करने के लिए आवश्यक न्यूनतम फ़्लिप।

    समस्या कथन दो नंबर n और k को देखते हुए, हमें दी गई संख्या को अधिकतम करने के लिए आवश्यक फ़्लिप की न्यूनतम संख्या को इसके बिट्स को फ़्लिप करके खोजने की आवश्यकता है जैसे कि परिणामी संख्या में k सेट बिट्स हों। कृपया ध्यान दें कि इनपुट को इस शर्त को पूरा करना चाहिए कि k