টাস্ক হলো সংখ্যা A-এর মান B-এ থাকা ডিজিট দিয়ে কিছু ডিজিট রিপ্লেস করে সর্বোচ্চ করা। যদি A-এর মান বাড়ানো না যায় তবে কোনো ডিজিট রিপ্লেস করা হবে না।
নোট − B-এর একটি ডিজিট শুধু একবার ব্যবহার করা যাবে।
ইনপুট
A = "1221" B = "1211"
আউটপুট
Maximum value of A possible: 2221
ব্যাখ্যা − B থেকে ২ নিয়ে A-এর প্রথম ১ রিপ্লেস করা হয়েছে। অন্য কোনো রিপ্লেসেশন থেকে A-এর মান বাড়বেনা।
ইনপুট
A = "1002" B = "3200"
আউটপুট
Maximum value of A possible: 3202
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- A-এর প্রতিটি ডিজিটকে B-এর ডিজিট দিয়ে রিপ্লেস করুন যদি সেটি A-এর ডিজিট থেকে বড় হয়।
- B-এর ডিজিটগুলো অ্যাসেন্ডিং অর্ডারে সর্ট করুন।
- A-কে বাম থেকে ডান ট্রাভার্স করুন।
- B-কে ডান থেকে বাম (সর্বোচ্চ ডিজিট থেকে) ট্রাভার্স করুন।
- যদি B-এর ডিজিট A-এর ডিজিট থেকে বড় হয়, তবে রিপ্লেস করুন এবং পয়েন্টার আপডেট করুন।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
string valueup(string str1, string str2) {
sort(str2.begin(), str2.end()); // অ্যাসেন্ডিং সর্ট
int len1 = str1.length();
int len2 = str2.length();
int j = len2 - 1; // B-এর শেষ ডিজিট থেকে শুরু
for (int i = 0; i < len1; i++) {
if (j < 0) break; // B-এর সব ডিজিট ব্যবহার হয়ে গেলে
if (str2[j] > str1[i]) {
str1[i] = str2[j];
j--; // একবার ব্যবহার হলে ডিক্রিমেন্ট
}
}
return str1;
}
int main() {
string a = "1204";
string b = "4521";
cout << valueup(a, b);
return 0;
}
আউটপুট
5424