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

সি++-এ একবার স্ব্যাপ করে দেওয়া সংখ্যা চেয়ে ছোট সর্বোচ্চ সংখ্যা

একটি সংখ্যা দেওয়া থাকলে, সর্বোচ্চ একবার দুটি অঙ্ক স্ব্যাপ করে তার চেয়ে ছোট সবচেয়ে বড় সংখ্যা বের করতে হবে।

উদাহরণ

ইনপুট: 54624 → আউটপুট: 54426

অ্যালগরিদম

  • ডান থেকে বামে স্ক্যান করে প্রথম পতন (drop) পয়েন্ট খুঁজুন (যেখানে digit[i] > digit[i+1])।
  • সেটির ডান পাশ থেকে সেটি চেয়ে ছোট সবচেয়ে বড় অঙ্ক খুঁজুন।
  • দুটো স্ব্যাপ করুন।
  • না পারলে -১ ফেরত দিন।

সি++ ইমপ্লিমেন্টেশন

#include <bits/stdc++.h>
using namespace std;

string getLargestSmaller(string str) {
    int len = str.length();
    int idx = -1;
    for (int i = len - 2; i >= 0; i--) {
        if (str[i] > str[i+1]) { idx = i; break; }
    }
    if (idx == -1) return "-1";
    int swapIdx = -1;
    for (int i = len - 1; i > idx; i--) {
        if (str[i] < str[idx] && (swapIdx == -1 || str[i] >= str[swapIdx]))
            swapIdx = i;
    }
    if (swapIdx != -1) swap(str[idx], str[swapIdx]);
    return str;
}

int main() {
    string str = "54624";
    cout << getLargestSmaller(str) << endl; // 54426
    return 0;
}

আউটপুট

54426
  1. C++ দিয়ে সর্বোচ্চ একবার সওয়াপ (Swap) অপারেশন ব্যবহার করে সবচেয়ে বড় সংখ্যা তৈরি করা

  2. C++ গ্রিডে একটি পয়েন্ট থেকে অন্য পয়েন্টে যাওয়ার পথের সংখ্যা বের করুন

  3. C++ দিয়ে অন্য একটি স্ট্রিংএ এক স্ট্রিংয়ের সাবস্ট্রিং-এর সংখ্যা বের করা

  4. C++-এ দিয়ে गये পয়েন্ট থেকে সম্ভাব্য কোয়াড্রিল্যাটারেল সংখ্যা বের করুন