समस्या कथन
लगातार अंकों की एक स्ट्रिंग और एक संख्या Y दी गई है। न्यूनतम सेटों की संख्या ढूंढनी है ताकि प्रत्येक सेट निम्न नियमों का पालन करे:
- सेट में लगातार संख्याएं होनी चाहिए
- कोई अंक एक से अधिक बार उपयोग नहीं किया जा सकता
- सेट में संख्या Y से अधिक नहीं होनी चाहिए
उदाहरण
यदि str = "1234" और Y = 20, तो उत्तर 3 है क्योंकि सेट बनते हैं: {12}, {3}, {4}
एल्गोरिदम
- स्ट्रिंग को संख्या में बदलें
- यदि संख्या Y से अधिक नहीं है, तो f = 1 मार्क करें
- यदि संख्या Y से अधिक हो जाती है, तो काउंट बढ़ाएं यदि f=1, f को 0 पर रीसेट करें, और num को वर्तमान अंक या 0 पर पुनः आरंभ करें
- स्ट्रिंग पूरी तरह से पार करने के बाद, यदि f=1 है तो काउंट बढ़ाएं
C++ उदाहरण
#include <iostream>
#include <string>
using namespace std;
int getMinSets(string str, int y) {
int cnt = 0, num = 0, l = str.length(), f = 0;
for (int i = 0; i < l; ++i) {
num = num * 10 + (str[i] - '0');
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