কম্পিউটার টিউটোরিয়াল

C++-তে B-এর ডিজিট দিয়ে A-এর ডিজিট রিপ্লেস করে মান সর্বোচ্চ করা


টাস্ক হলো সংখ্যা 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
  1. C++-এ arr[i]*i এর যোগফল সর্বাধিক করা

  2. C++-এ অ্যারে-এর মেডিয়ান সর্বাধিক করা

  3. C++-এ বাইনারি সার্চ ট্রি (BST)-এ সর্বনিম্ন মান্যুক্ত নোড (Node) খুঁজে বের করা

  4. C++-এ একটি সংখ্যা তার অঙ্কগুলোর ফ্যাক্টোরিয়ালের যোগফল দিয়ে বিভাজ্য কিনা চেক করা