समस्या कथन
दो धनात्मक पूर्णांक N और K दिए गए हैं। संख्या N से हटाए जा सकने वाले अंकों की न्यूनतम संख्या ज्ञात करें ताकि निष्कासन के बाद संख्या 10^K से विभाज्य हो जाए। यदि असंभव हो तो -1 प्रिंट करें।
उदाहरण
यदि N = 10203027 और K = 2 तो हमें 3 अंक हटाने होंगे। यदि हम 3, 2 और 7 हटाते हैं तो संख्या 10200 बन जाती है जो 10^2 से विभाज्य है
एल्गोरिदम
1. संख्या के अंत से पार करना शुरू करें। यदि वर्तमान अंक शून्य नहीं है, तो काउंटर चर बढ़ाएं, अन्यथा चर K घटाएं 2. यदि K शून्य है, तो उत्तर के रूप में काउंटर वापस करें 3. पूरी संख्या पार करने के बाद, जांचें कि K का वर्तमान मान शून्य है या नहीं। यदि यह शून्य है, तो उत्तर के रूप में काउंटर वापस करें, अन्यथा उत्तर N में अंकों की संख्या -1 के रूप में वापस करें 4. यदि दी गई संख्या में कोई शून्य नहीं है, तो उत्तर के रूप में -1 वापस करें
उदाहरण
#include <bits/stdc++.h> using namespace std; int getBitsToBeRemoved(int n, int k) { string s = to_string(n); int result = 0; int zeroFound = 0; for (int i = s.size() - 1; i >= 0; --i) { if (k == 0) { return result; } if (s[i] == '0') { zeroFound = 1; --k; } else { ++result; } } if (!k) { return result; } else if (zeroFound) { return s.size() - 1; } return - 1; } int main() { int n = 10203027; int k = 2; cout << "न्यूनतम आवश्यक निष्कासन = " << getBitsToBeRemoved(n, k) << endl; return 0; }जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है
आउटपुट
न्यूनतम आवश्यक निष्कासन = 3