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

सी ++ में आसन्न दो सेट बिट्स प्रदर्शित होने वाले k बार के साथ बाइनरी स्ट्रिंग्स की गणना करें

हमें पूर्णांक N और K दिए गए हैं। हमारे पास लंबाई N के द्विआधारी तार हैं, जिनमें केवल 0 और 1 हैं। लक्ष्य लंबाई N के ऐसे तारों की संख्या ज्ञात करना है जिनमें K लगातार 1 है। यानी, अगर N=3, और K=2, तो उन सभी 3-अंकीय बाइनरी स्ट्रिंग्स को गिनें, जिनमें लगातार 2 1 हों।

उदाहरण -111, यहाँ आसन्न 1 दो बार ( K बार ) दिखाई देता है।

011 और 110 में आसन्न 1 केवल एक बार दिखाई दिया।

हम पिछले मानों के परिणामों को संग्रहीत करके इसका समाधान करेंगे।

3D सरणी गणना [x] [y] [z] लेना। जहाँ x N है, y K है और z स्ट्रिंग का अंतिम अंक है ( 0 या 1 )

  • N=1 के लिए, स्ट्रिंग्स "0" और "1" होंगी। आसन्न 1 की संख्या=0.

तो किसी भी K के लिए। यदि N=1, गिनती=0.

गिनती[1][के][0] =गिनती[1][के][1] =0.

  • जब अंतिम अंक 0 हो, आसन्न 1 की गिनती को K के रूप में करने के लिए

K वाले के साथ N-1 लंबाई के सभी अंक + अंतिम 0 → नई लंबाई =N

यदि 1 से सटे K की संख्या C थी, तो अंत में 0 जोड़ने से वह संख्या नहीं बदलेगी।

गिनती[N][K][0] =गिनती[N-1][K][0] + count[N-1][K][1]

  • जब अंतिम अंक 1 हो, आसन्न 1 की गणना को K के रूप में करने के लिए

लंबाई N-1 के सभी अंक 0 के साथ समाप्त होने वाले K + अंतिम 1 → नई लंबाई =N,

गिनती[N-1][K][0]

लंबाई के सभी अंक N-1, K-1 वाले के साथ 1 से समाप्त होते हैं + अंतिम 1 → नई लंबाई =N,

गिनती[N-1][K-1][1]

गिनती[एन][के][1] =गिनती[एन-1][के][0] + गिनती[एन-1][के-1][1]

कुल ऐसे तार =गिनती [एन] [के] [0] + गिनती [एन] [के] [1]

इनपुट

N=4, K=2

आउटपुट

Count of strings: 2

स्पष्टीकरण − 1110, 0111 लंबाई 4 के एकमात्र तार हैं जहां आसन्न 1 केवल दो बार दिखाई देता है।

1110- “11 10”, then “1 11 0” ( splitting to show which adjacent 1’s are counted )
0111- “0 11 1”, then “01 11”. K=2, adjacent 1’s= 2 times

इनपुट

N=3, K=1

आउटपुट

Count of strings: 2

स्पष्टीकरण - 110, 011. लंबाई के एकमात्र तार हैं जहां आसन्न 1 एक बार दिखाई देता है।

111 में आसन्न 1 दो बार दिखाई देता है।

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

  • पूर्णांक एन और के तार की लंबाई को संग्रहीत करते हैं और नहीं। प्रत्येक में आसन्न 1 बार दिखाई देता है।

  • फ़ंक्शन स्ट्रिंगकाउंट (int n, int k) n और k को पैरामीटर के रूप में लेता है और K के साथ स्ट्रिंग्स की गिनती 1 के आसन्न देता है।

  • ऐरे काउंट [i] [j] [0/1] का उपयोग लंबाई के स्ट्रिंग्स की गिनती को स्टोर करने के लिए किया जाता है I साथ में j आसन्न 1 को 0 या 1 के साथ भेजना।

  • प्रारंभिक स्थिति गिनती है [1] [0] [0] =1; गिनती[1][0][1] =1;

  • अब 2 लंबाई के तार (i=2) से n लंबाई तक शुरू करें। ऐसे प्रत्येक स्ट्रिंग के लिए 1 से सटे Ktimes की संख्या की जाँच करें। j=0;j<=k, पिछली गणनाओं से। वर्तमान गणना [i] [j] [0] और गिनती [i] [j] [1] अपडेट करें।

  • अगर j-1>=0, आसन्न 1 की संख्या 1 से अधिक है। फिर 1 के साथ समाप्त होने वाले स्ट्रिंग्स की गिनती को गिनती के रूप में अपडेट करें [i] [j] [1] + गिनती [i - 1] [j - 1] [1] ];

  • अंत में गिनती [एन] [के] [0] और गिनती [एन] [के] [1] जोड़ें। परिणामस्वरूप इसे स्टोर करें।

  • इच्छित गणना के रूप में परिणाम लौटाएं।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int stringcount(int n, int k){
   //count of strings with length=n and adajcent 1's=k
   int count[n + 1][k + 1][2]={0};
   //count[n][k][0] -- strings with length=n and adajcent 1's=k last character is 0
   //count[n][k][1] -- strings with length=n and adajcent 1's=k last character is 1
   // If n = 1 and k = 0.
   count[1][0][0] = 1;
   count[1][0][1] = 1;
   for (int i = 2; i <= n; i++) {
      // number of adjacent 1's can not exceed i-1
      for (int j = 0; j <= k; j++) {
         count[i][j][0] = count[i - 1][j][0] + count[i - 1][j][1];
         count[i][j][1] = count[i - 1][j][0];
      if (j - 1 >= 0)
         count[i][j][1] =count[i][j][1] + count[i - 1][j - 1][1];
      }
   }
   int result=count[n][k][0]+count[n][k][1];
   return result;
}
int main(){
   int N = 6, K = 3;
   cout <<"Strings of length 6 and 3 adjacent 1's in each :"<< stringcount(N,K);
   return 0;
}

आउटपुट

Strings of length 6 and 3 adjacent 1's in each :7

  1. C++ में दो बाइनरी स्ट्रिंग्स जोड़ने का प्रोग्राम

    बाइनरी नंबर के साथ दो स्ट्रिंग्स को देखते हुए, हमें उन दो बाइनरी स्ट्रिंग्स को जोड़कर प्राप्त परिणाम को खोजना होगा और परिणाम को बाइनरी स्ट्रिंग के रूप में वापस करना होगा। बाइनरी नंबर वे नंबर होते हैं जिन्हें या तो 0 या 1 के रूप में व्यक्त किया जाता है। 2 बाइनरी नंबर जोड़ते समय बाइनरी जोड़ नियम होता

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

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

  1. C++ में n बाइनरी स्ट्रिंग्स जोड़ें?

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