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

C++ में बारी-बारी से एक बाइनरी स्ट्रिंग बनाने के लिए आवश्यक न्यूनतम स्वैप

समस्या कथन

सम लंबाई की बाइनरी स्ट्रिंग और 0 और 1 की समान संख्या को देखते हुए। स्ट्रिंग को वैकल्पिक बनाने के लिए स्वैप की न्यूनतम संख्या क्या है? यदि कोई दो क्रमागत तत्व समान नहीं हैं तो एक बाइनरी स्ट्रिंग बारी-बारी से होती है

उदाहरण

अगर str =11110000 तो 2 स्वैप की आवश्यकता है।

एल्गोरिदम

  • विषम स्थिति और स्ट्रिंग की सम स्थिति पर शून्यों की संख्या गिनें। उनकी गिनती क्रमशः विषम शून्य और सम शून्य हो
  • विषम स्थिति और स्ट्रिंग की सम स्थिति पर संख्याओं की गणना करें। मान लीजिए कि उनकी संख्या क्रमशः विषम हैOneCnt और यहां तक ​​किOneCnt
  • हम हमेशा 1 को 0 के साथ स्वैप करेंगे। इसलिए हम सिर्फ यह जांचते हैं कि क्या हमारी वैकल्पिक स्ट्रिंग 0 से शुरू होती है तो स्वैप की संख्या न्यूनतम (ईवनज़ीरोसेंट, ऑडऑनसीएनटी) है और यदि हमारी वैकल्पिक स्ट्रिंग 1 से शुरू होती है तो स्वैप की संख्या है मिनट (समवन, विषम ज़ीरोसेंट)। उत्तर इन दोनों में से एक मिनट है

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int getMinSwaps(string str) {
   int minSwaps = 0;
   int oddZeroCnt = 0;
   int evenZeroCnt = 0;
   int oddOneCnt = 1;
   int evenOneCnt = 1;
   int n = str.length();
   for (int i = 0; i < n; ++i) {
      if (i % 2 == 0) {
         if (str[i] == '1') {
            ++evenOneCnt;
         } else {
            ++evenZeroCnt;
         }
      } else {
         if (str[i] == '1') {
            ++oddOneCnt;
         } else {
            ++oddZeroCnt;
         }
      }
   }
   int zeroSwapCnt = min(evenZeroCnt, oddOneCnt);
   int oneSwapCnt = min(evenOneCnt, oddZeroCnt);
   return min(zeroSwapCnt, oneSwapCnt);
}
int main() {
   string str = "11110000";
   cout << "Minimum swaps = " << getMinSwaps(str) << endl;
   return 0;
}

जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है -

आउटपुट

Minimum swaps = 2

  1. C++ का उपयोग करके N को 25 से विभाज्य बनाने के लिए आवश्यक दी गई चालों की न्यूनतम संख्या।

    समस्या कथन बिना अग्रणी शून्य के एक संख्या N दी गई है। कार्य N को 25 से विभाज्य बनाने के लिए आवश्यक न्यूनतम चालों को खोजना है। प्रत्येक चाल पर, कोई भी दो आसन्न अंकों को स्वैप कर सकता है और यह सुनिश्चित कर सकता है कि किसी भी समय संख्या में कोई अग्रणी शून्य नहीं होना चाहिए। यदि N को 25 से विभाज्य बनान

  1. C++ में एक स्ट्रिंग पैलिंड्रोम बनाने के लिए विलोपन की न्यूनतम संख्या।

    समस्या कथन आकार एन की एक स्ट्रिंग को देखते हुए। कार्य स्ट्रिंग पैलिंड्रोम बनाने के लिए वर्णों की न्यूनतम संख्या को हटाना है। यदि दी गई स्ट्रिंग abcda है तो हम इसे पैलिंड्रोम बनाने के लिए पहले और अंतिम को छोड़कर किन्हीं भी 2 वर्णों को हटा सकते हैं। अगर हम अक्षर b और c को हटाते हैं तो ada स्ट्रिं

  1. C++ में को-प्राइम ऐरे बनाने के लिए न्यूनतम इंसर्शन

    इस खंड में हम एक और दिलचस्प समस्या देखेंगे। मान लीजिए कि हमारे पास एन तत्वों की एक सरणी है। इस सरणी को सह-अभाज्य सरणी बनाने के लिए हमें न्यूनतम संख्या में प्रतिच्छेदन बिंदु खोजने होंगे। को-प्राइम एरे में हर दो लगातार एलीमेंट का gcd 1 होता है। हमें ऐरे को भी प्रिंट करना होता है। मान लीजिए हमारे पास