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 में से किसी भी अंक को हटाया जा सकता है। यदि हटाने के लिए कई अंक उपलब्ध हैं तो हम उस अंक को हटाएंगे जिससे हटाने के बाद बनी संख्या सबसे बड़ी हो।

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

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

1. 34241341

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

2. 3214241

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

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

1. 8097860

इस मामले में, हमें संख्या को 3 से विभाजित करके शेषफल ढूंढना होगा जो 2 के बराबर है। तो, 2 शेषफल के मामले में, हम संख्या से 2, 5, 8 हटा सकते हैं। तो, स्थिति 1 से 8 और 5 हटाया जा सकता है ताकि संख्या 2 से विभाज्य बने। हम 5वीं स्थिति से 8 हटाएंगे क्योंकि यदि हम इसे पहली स्थिति से हटाते हैं तो एक छोटी संख्या लौटाई जाएगी। बनी नई संख्या 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++ में सबसे छोटी K अंकों की संख्या जो X से विभाज्य हो

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

  1. - C++ में सबसे बड़ी K अंकों की संख्या जो X से विभाज्य हो

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

  1. - C++ में सबसे छोटी K अंकों की संख्या खोजें जो X से विभाज्य हो

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