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

C++ एक संख्या को दो विभाज्य भागों में विभाजित करता है

इस समस्या में, हमें एक स्ट्रिंग दी जाती है जिसे एक संख्या के रूप में व्याख्या किया जा सकता है। अब हमें उस स्ट्रिंग को दो भागों में इस तरह से विभाजित करना है कि पहला भाग A से विभाज्य हो और दूसरा भाग B (हमें दिए गए दो पूर्णांक) से विभाज्य हो। उदाहरण के लिए -

Input : str = "123", a = 12, b = 3
Output : YES
12 3
"12" is divisible by a and "3" is
divisible by b.

Input : str = "1200", a = 4, b = 3
Output : YES
12 00

Input : str = "125", a = 12, b = 3
Output : NO

अब इस समस्या में, हम कुछ पूर्व-गणना करेंगे जिससे हमारा प्रोग्राम तेज़ हो जाएगा, और फिर यह उच्च बाधाओं पर काम करने में सक्षम होगा।

समाधान खोजने के लिए दृष्टिकोण

इस दृष्टिकोण में, हम स्ट्रिंग के माध्यम से दो लूप चलाएंगे, पहला प्रारंभ से अंत तक और दूसरा अंत से प्रारंभ तक। अब हर बिंदु पर, हम पहले लूप में a और दूसरे लूप में b से बने पूर्णांक का मॉड लेते हैं, और फिर हम अपना उत्तर पा सकते हैं।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
void divisionOfString(string &str, int a, int b){
    int n = str.length();
    vector<int> mod_a(n+1, 0); //
    mod_a[0] = (str[0] - '0')%a;
    for (int i=1; i<n; i++) // front loop for calculating the mod of integer with a
        mod_a[i] = ((mod_a[i-1]*10)%a + (str[i]-'0'))%a;
    vector<int> mod_b(n+1, 0);
    mod_b[n-1] = (str[n-1] - '0')%b;
    int power10 = 10; // as we have assigned answer to last index
    for (int i= n-2; i>=0; i--){ // end loop for calculating the mod of integer with b
        mod_b[i] = (mod_b[i+1] + (str[i]-'0')*power10)%b;
        power10 = (power10 * 10) % b;
    }
    for (int i=0; i<n-1; i++){ // finding the division point
        if (mod_a[i] != 0) // we can skip through all the positions where mod_a is not zero
            continue;
        if (mod_b[i+1] == 0){ // now if the next index of mod_b is also zero so that is our division point
            cout << "YES\n";
            /*******Printing the partitions formed**********/
            for (int k=0; k<=i; k++)
               cout << str[k];
            cout << " ";
            for (int k=i+1; k < n; k++)
               cout << str[k];
            return;
        }
    }
    cout << "NO\n"; // else we print NO
}
// Driver code
int main(){
    string str = "123"; // given string
    int a = 12, b = 3;
    divisionOfString(str, a, b);
    return 0;
}

आउटपुट

YES
12 3

उपरोक्त कोड की व्याख्या

इस दृष्टिकोण में, हमने अब प्रत्येक भाग पर बनने वाली शेष संख्या की गणना की। हमारा पहला नंबर ए से विभाज्य होना चाहिए, इसलिए हम एक फॉरवर्ड लूप चलाते हैं और उस नंबर के मॉड को ए के साथ स्टोर करते हैं। बी के साथ, हम एक बैकवर्ड लूप चलाते हैं और मॉड्स को स्टोर करते हैं क्योंकि हम जानते हैं कि अगर किसी भी स्थिति में हमारा मॉड शून्य है और अगले इंडेक्स के साथ बी के साथ मॉड शून्य है, तो यह हमारा उत्तर होगा, और इसलिए हम इसे प्रिंट करते हैं।

निष्कर्ष

इस ट्यूटोरियल में, हम एक संख्या को दो विभाज्य भागों में विभाजित करने के लिए एक समस्या का समाधान करते हैं। हमने इस समस्या के लिए C++ प्रोग्राम और संपूर्ण दृष्टिकोण (Normal) भी सीखा जिसके द्वारा हमने इस समस्या को हल किया। हम उसी प्रोग्राम को अन्य भाषाओं जैसे सी, जावा, पायथन और अन्य भाषाओं में लिख सकते हैं। हमें उम्मीद है कि आपको यह ट्यूटोरियल मददगार लगा होगा।


  1. C++ में एक सेट को k सबसेट में विभाजित करने के तरीकों की संख्या की गणना करें

    दो अंक e और p दिए गए हैं। लक्ष्य उन तरीकों की संख्या गिनना है जिनसे हम एक सेट के e तत्वों को p विभाजन/सबसेट में विभाजित कर सकते हैं। उदाहरण के लिए इनपुट e=4 p=2 आउटपुट Count of number of ways to partition a set into k subsets are: 7 स्पष्टीकरण If elements are: a b c d then ways to divide them into

  1. जाँच करें कि C++ में कोई बड़ी संख्या 11 से विभाज्य है या नहीं

    यहां हम देखेंगे कि किसी संख्या को 11 से विभाज्य कैसे किया जाता है या नहीं। इस मामले में संख्या बहुत बड़ी है। इसलिए हम संख्या को स्ट्रिंग के रूप में रखते हैं। यह जांचने के लिए कि क्या कोई संख्या 11 से विभाज्य है, यदि विषम स्थिति मानों का योग और सम स्थिति मानों का योग समान है, तो संख्या 11 से विभाज्य

  1. जांचें कि क्या बड़ी संख्या सी ++ में 15 से विभाज्य है

    यहां हम देखेंगे कि किसी संख्या को 15 से विभाज्य कैसे किया जाता है या नहीं। इस मामले में संख्या बहुत बड़ी है। इसलिए हम संख्या को स्ट्रिंग के रूप में रखते हैं। यह जांचने के लिए कि क्या कोई संख्या 15 से विभाज्य है, यदि संख्या 5 से विभाज्य है, और 3 से विभाज्य है, तो 5 से विभाज्यता की जाँच करने के लिए,