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

किसी संख्या का संभावित कट इस प्रकार है कि C++ में अधिकतम भाग 3 से विभाज्य हो


इस समस्या में, हमें एक बड़ा पूर्णांक मान दिया जाता है (10 5 तक) अंक)। हमारा काम आवश्यक कटों की कुल संख्या को प्रिंट करना है ताकि अधिकतम भाग 3 से विभाज्य हों।

आइए समस्या को समझने के लिए एक उदाहरण लेते हैं

इनपुट - 9216

आउटपुट -3

स्पष्टीकरण - संख्या को 9|21|6 से विभाजित किया जाता है।

इस समस्या को हल करने के लिए, हमें संख्या के सबसे छोटे महत्वपूर्ण बिट यानी संख्या के अंतिम अंक से शुरुआत करनी होगी। यहाँ के लिए, हम तीन से विभाज्य सबसे छोटी संख्या पाएंगे। और फिर उसके आधार पर गिनती अपडेट करें।

उदाहरण - अगर arr[i] एक 3 विभाज्य संख्या बनाता है, तो हम गिनती बढ़ाएंगे और संख्या के अगले अंक की ओर बढ़ेंगे। अगर arr[i] 3 से विभाज्य नहीं है, तो हम इसे अगले अंक के साथ जोड़ देंगे और 3 की विभाज्यता की जांच करेंगे।

3 की विभाज्यता - एक संख्या 3 से विभाज्य होती है यदि संख्या के अंकों की संख्या तीन से विभाज्य हो।

उदाहरण

हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम

#include <bits/stdc++.h>
using namespace std;
int countMaximum3DivisibleNumbers(string number){
   int n = number.length();
   vector<int> remIndex(3, -1);
   remIndex[0] = 0;
   vector<int> counter(n + 1);
   int r = 0;
   for (int i = 1; i <= n; i++) {
      r = (r + number[i-1] - '0') % 3;
      counter[i] = counter[i-1];
      if (remIndex[r] != -1)
         counter[i] = max(counter[i], counter[remIndex[r]] + 1);
         remIndex[r] = i+1;
   }
   return counter[n];
}
int main() {
   string number = "216873491";
   cout<<"The number of 3 divisible number created by cutting "<<number<<" are : " <<countMaximum3DivisibleNumbers(number);
   return 0;
}

आउटपुट

The number of 3 divisible number created by cutting 216873491 are : 5

  1. सर्कुलर सरणी में अधिकतम योग जैसे कि कोई भी दो तत्व सी ++ में आसन्न नहीं हैं

    इस समस्या में, हमें एक वृत्ताकार सरणी cirArr[] दी गई है। हमारा काम सर्कुलर सरणी में अधिकतम योग खोजने के लिए एक प्रोग्राम बनाना है जैसे कि कोई भी दो तत्व सी ++ में आसन्न नहीं हैं। समस्या का विवरण वृत्ताकार सरणी के लिए, हमें सरणी के तत्वों का अधिकतम योग ज्ञात करना होगा जैसे कि आसन्न तत्वों को नहीं लि

  1. एक सरणी तत्व खोजें जैसे कि सभी तत्व इसके द्वारा c++ . का उपयोग करके विभाज्य हैं

    विचार करें कि हमारे पास कुछ तत्वों के साथ एक सरणी ए है। हमें A से एक अवयव इस प्रकार ज्ञात करना है कि सभी तत्वों को इससे विभाजित किया जा सके। मान लीजिए कि ए [15, 21, 69, 33, 3, 72, 81] जैसा है, तो तत्व 3 होगा, क्योंकि सभी संख्याएं 3 से विभाज्य हो सकती हैं। इस समस्या को हल करने के लिए, हम ए में सबसे

  1. A में N अंक इस प्रकार जोड़ें कि वह C++ में प्रत्येक जोड़ के बाद B से विभाज्य हो?

    यहां हम देखेंगे कि एन अंकों को जोड़कर एक संख्या ए कैसे उत्पन्न की जाती है, और प्रत्येक चरण में नए अंक जोड़ते समय यह दूसरी संख्या बी से विभाज्य हो जाएगा। आइए विचार करें कि हम 4 जोड़कर 5 अंकों की संख्या बनाने जा रहे हैं। इसके साथ अतिरिक्त अंक। हम 7 से विभाज्यता की जांच करेंगे। संख्या 8 से शुरू होगी। त