समस्या कथन
लगातार अंकों की एक स्ट्रिंग और एक संख्या Y को देखते हुए, कार्य न्यूनतम सेटों की संख्या ज्ञात करना है जैसे कि प्रत्येक सेट नीचे दिए गए नियम का पालन करता है -
- सेट में लगातार संख्याएं होनी चाहिए
- किसी भी अंक का एक से अधिक बार उपयोग नहीं किया जा सकता है।
- सेट में संख्या Y से अधिक नहीं होनी चाहिए।
उदाहरण
यदि str ="1234" और Y =20 है तो उत्तर 3 है क्योंकि नीचे सेट बनाए गए हैं -
{12} {3} और {4}
एल्गोरिदम
- स्ट्रिंग को संख्या में बदलें
- यदि संख्या Y से बड़ी नहीं है, तो f =1 चिह्नित करें
- यदि संख्या Y से अधिक है, तो f =1 होने पर गिनती बढ़ाएं और f को 0 के रूप में पुन:प्रारंभ करें और num को s[i]-'0' या num को 0 के रूप में प्रारंभ करें
- स्ट्रिंग में पूरी तरह से पुनरावृति करने के बाद, यदि f 1 है तो गिनती बढ़ाएं
उदाहरण
#include <iostream> #include <string> using namespace std; int getMinSets(string str, int y) { int cnt = 0; int num = 0; int l = str.length(); int f = 0; for (int i = 0; i < l; ++i) { num = num * 10 + str[i] - 48; if (num <= y) { f = 1; continue; } if (f) { ++cnt; } num = str[i] - '0'; f = 0; if (num <= y) { f = 1; } else { num = 0; } } if (f) { ++cnt; } return cnt; } int main() { string str = "1234"; int y = 20; cout << "Minimum sets = " << getMinSets(str, y) << endl; return 0; }
आउटपुट
जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है -
Minimum sets = 3