সমস্যা বিবৃতি
পরপর সংখ্যার একটি স্ট্রিং এবং একটি সংখ্যা Y দেওয়া, কাজটি হল ন্যূনতম সেটের সংখ্যা খুঁজে বের করা যাতে প্রতিটি সেট নীচের নিয়ম অনুসরণ করে −
- সেটে পরপর সংখ্যা থাকা উচিত
- কোনও সংখ্যা একবারের বেশি ব্যবহার করা যাবে না।
- সেটের সংখ্যা Y এর বেশি হওয়া উচিত নয়।
উদাহরণ
যদি str =“1234” এবং Y =20 হয় তাহলে উত্তর হল 3 যেমন নিচের সেট তৈরি করা হয়েছে −
{12} {3} এবং {4}
অ্যালগরিদম
- স্ট্রিংকে নম্বরে রূপান্তর করুন
- যদি সংখ্যাটি Y-এর থেকে বেশি না হয়, তাহলে f =1 চিহ্নিত করুন
- যদি সংখ্যাটি Y ছাড়িয়ে যায়, তাহলে f =1 হলে গণনা বাড়ান এবং f কে 0 হিসাবে পুনরায় আরম্ভ করুন এবং 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