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

C++ में किसी संख्या को 6 से विभाज्य बनाने के लिए प्रिंट अंक की स्थिति को हटाया जाना है

इस समस्या में हमें संख्या दी जाती है और हमें संख्या में से अधिक अंक निकालने होते हैं। ताकि हटाने के बाद बनने वाली नई संख्या 6 से विभाज्य हो।

आइए अवधारणा को बेहतर ढंग से सीखने के लिए एक उदाहरण लेते हैं -

Input : 1324
Output : 4

स्पष्टीकरण - चौथी संख्या को हटाने पर हमें 132 मिलेगा जो कि 6 से विभाज्य है।

यहां, हमें एक संख्या दी गई है और हमें उस स्थिति को वापस करना होगा जहां से संख्या को 6 से विभाज्य बनाने के लिए हटाया जाता है।

इस समस्या को हल करने के लिए, हम एक तर्क बनाने की कोशिश करेंगे जो समस्या को हल करता है। इसके लिए हम अपने ज्ञान का उपयोग करेंगे कि यदि कोई संख्या 2 और 3 से विभाज्य है तो वह 6 से विभाज्य है।

संख्या में से अंक हटाने के बाद बनी नई संख्या की 6 की विभाज्यता यानि 2 और 3 दोनों की विभाज्यता के लिए जाँच की जाएगी।

दृष्टिकोण

संख्या के आधार पर हम यह पता लगा सकते हैं कि किसी अंक को हटाकर बनाई गई संख्या 6 से विभाज्य होगी या नहीं। संख्या का अंतिम अंक देखने पर दो स्थितियाँ उत्पन्न होती हैं।

जब अंतिम अंक विषम हो

जब अंतिम अंक विषम हो तो अंतिम अंक को हटाना ही संभव है। और नई संख्या केवल 6 से विभाज्य नहीं होगी यदि अंतिम अंक के आगे का अंक सम हो। अन्यथा, समाधान संभव नहीं है।

जब अंतिम अंक सम हो

यदि अंतिम अंक सम है, तो संख्या को 3 से विभाजित करने पर हमें शेषफल ज्ञात करना होता है और इस संख्या के आधार पर हम जांच सकते हैं कि कौन सा अंक हटाया जा सकता है।

संख्या को 3 तीन मामलों से विभाजित करने पर -

शेष 1 है - यदि भाग का शेष भाग 1 है तो अंक 1, 4, 7 में से कोई भी अंक सरणी से हटाया जा सकता है। यदि हटाने के लिए कई अंक उपलब्ध हैं तो हम अंक को इस तरह से हटा देंगे कि हटाने के बाद बनने वाली संख्या सबसे बड़ी हो।

शेष 2 है - यदि भाग का शेष भाग 2 है तो अंक 2, 5, 8 में से कोई भी अंक सरणी से हटाया जा सकता है। यदि हटाने के लिए कई अंक उपलब्ध हैं तो हम अंक को इस तरह से हटा देंगे कि हटाने के बाद बनने वाली संख्या सबसे बड़ी हो।

शेष 3 है - यदि भाग का शेष भाग 1 है तो अंक 3, 6, 9 में से कोई भी अंक सरणी से हटाया जा सकता है। यदि हटाने के लिए कई अंक उपलब्ध हैं तो हम अंक को इस तरह से हटा देंगे कि हटाने के बाद बनने वाली संख्या सबसे बड़ी हो।

इनके आधार पर कुछ समस्याओं को हल करते हैं और वांछित आउटपुट प्राप्त करते हैं -

जब अंतिम अंक विषम हो

<एच3>1. 34241341

इस स्थिति में, केवल एक अंक जिसे हटाया जा सकता है वह अंतिम स्थान से 1 है और बनने वाली संख्या 3432134 होगी जो कि 6 से विभाज्य है। इसलिए, हम हटाए गए 1 की स्थिति को वापस कर देंगे अर्थात 8

<एच3>2. 3214241

इस मामले में, अंतिम स्थान से केवल 1 अंक हटाया जा सकता है और बनने वाली संख्या 341224 होगी। जो 6 से विभाज्य नहीं है, इसलिए, हम -1 को वापस करेंगे।

जब अंतिम अंक सम हो

<एच3>1. 8097860

इस मामले में, हमें संख्या को 3 से विभाजित करने और शेषफल को खोजने की आवश्यकता है जो 2 के बराबर है। इसलिए, शेष के रूप में 2 के मामले में, हम संख्या से 2, 5, 8 को हटा सकते हैं। इसलिए, स्थिति 1 से 8 और संख्या को 2 से विभाज्य बनाने के लिए 5 को हटाया जा सकता है। हम 8 को 5वें स्थान से हटा देंगे क्योंकि यदि हम इसे पहले स्थान से हटाते हैं तो छोटी संख्या वापस आ जाएगी। बनने वाली नई संख्या 809760 होगी जो 6 से विभाज्य है तो, हम 5 वापस करेंगे।

उदाहरण

इस तर्क के आधार पर समस्या को हल करने के लिए एक प्रोग्राम बनाते हैं -

#include <bits/stdc++.h>
using namespace std;
void isDivisibleBy6(string num){
   int n = num.length();
   int a[n];
   int sum = 0;
   for (int i = 0; i < n; i++) {
      a[i] = num[i] - '0';
      sum += a[i];
   }
   if (a[n - 1] % 2){
      if ( (a[n - 2] % 2 != 0) || (sum - a[n - 1]) % 3 != 0) {
         cout << "-1" << endl;
      }
      else {
         cout << n << endl;
      }
   }
   else {
      int re = sum % 3;
      int del = -1;
      int flag = 0;
      for (int i = 0; i < n - 1; i++) {
         if ((a[i]) % 3 == re) {
            if (a[i + 1] > a[i]) {
               del = i;
               flag = 1;
               break;
            }
            else {
               del = i;
            }
         }
      }
      if (flag == 0) {
         if (a[n - 2] % 2 == 0 and re == a[n - 1] % 3)
            del = n - 1;
      }
      if (del == -1)
         cout << -1 << endl;
      else {
         cout << del + 1 << endl;
      }
   }
}
int main(){
   string number = "343224152";
   isDivisibleBy6(number);
   return 0;
}

आउटपुट

5

  1. C++ X से विभाज्य K अंक की सबसे छोटी संख्या के लिए प्रोग्रामिंग?

    X से विभाज्य K अंक की सबसे छोटी संख्या, X से विभाज्य की जाँच करके सूत्र का उपयोग करके पाई जाती है। सूत्र निम्नलिखित तरीके से काम करता है - न्यूनतम K अंक संख्या [मिनट] की गणना करें उदाहरण के लिए:10/100/1000 आदि। अब ज्ञात कीजिए कि क्या मिनट X से विभाज्य है। यदि हाँ, तो यह उत्तर है। यदि नहीं, तो min

  1. C++ प्रोग्राम X से विभाज्य K अंक की सबसे बड़ी संख्या के लिए?

    इस समस्या में हम सबसे बड़ी K-अंकीय संख्या ज्ञात करने का प्रयास करेंगे, जो कि X से विभाज्य होगी। इस कार्य को करने के लिए हम इस सूत्र ((10^k) – 1) द्वारा सबसे बड़ी K अंकों की संख्या लेंगे। फिर जांचें कि संख्या एक्स से विभाज्य है या नहीं, यदि नहीं, तो हम इस सूत्र का उपयोग करके सटीक संख्या प्राप्त करेंग

  1. C++ प्रोग्राम X से विभाज्य K अंक की सबसे छोटी संख्या के लिए?

    इस समस्या में हम सबसे छोटी K-अंकीय संख्या ज्ञात करने का प्रयास करेंगे, जो X से विभाज्य होगी। इस कार्य को करने के लिए हम इस सूत्र द्वारा सबसे छोटी K-अंकीय संख्या लेंगे (10^(k-1))। फिर जांचें कि संख्या X से विभाज्य है या नहीं, यदि नहीं, तो हम इस सूत्र का उपयोग करके सटीक संख्या प्राप्त करेंगे। (min+ 𝑋