টাস্ক হলো N ডিজিটের একটি সংখ্যা দিয়ে ০-৯ ডিজিটের বিকল্প ডিজিট থাকা একটি অ্যারে ব্যবহার করে সংখ্যাটির মান সর্বোচ্চ করা। শর্ত: শুধু একটি কনসিকিউটিভ সেগমেন্ট (সubesquent digits) একবার রিপ্লেস করা যাবে।
ইনপুট
N=1234, arr[]={3,0,1,5,7,7,8,2,9,4}
আউটপুট
1257
ব্যাখ্যা − ৩ কে ৫ (arr[3]) দিয়ে এবং ৪ কে ৭ (arr[4]) দিয়ে রিপ্লেস করা হয়েছে।
ইনপুট
N=5183, arr[]={3,0,1,5,7,7,8,2,9,4}
আউটপুট
7183
প্রোগ্রামে ব্যবহৃত পদ্ধতি
Max()ফাংশনে স্ট্রিং সাইজNনিন।- লুপ চালিয়ে সেই ডিজিট খুঁজুন যার বিকল্পটি নিজের চেয়ে বড়।
- সেটি রিপ্লেস করুন এবং পরবর্তী ডিজিটগুলোর ওপর যেতে থাকুন যতক্ষণ না বিকল্পটি নিজের চেয়ে ছোট পাওয়া যায়।
- প্রথম রিপ্লেস হওয়ার পর ফাংশন থেকে রিটার্ন করুন (কারণ শুধু এক সেগমেন্ট রিপ্লেস করা যাবে)।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
string Max(string str, int arr[]) {
int N = str.size();
for (int i = 0; i < N; i++) {
int digit = str[i] - '0';
if (digit < arr[digit]) {
int j = i;
while (j < N && (str[j] - '0' <= arr[str[j] - '0'])) {
str[j] = '0' + arr[str[j] - '0'];
j++;
}
return str;
}
}
return str; // কোনো পরিবর্তন না হলে মূল স্ট্রিং রিটার্ন
}
int main() {
string str = "2075";
int arr[] = {3, 0, 1, 5, 7, 7, 8, 2, 9, 4};
cout << "Maximized number: " << Max(str, arr);
return 0;
}
আউটপুট
Maximized number: 2375