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

সি++-এ সর্বোচ্চ একবার স্ব্যাপ করে পরবর্তী বড় সংখ্যা বের করা

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

উদাহরণ

ইনপুট: 12345 → আউটপুট: 12354 (৪ ও ৫ স্ব্যাপ)

অ্যালগরিদম

  • ডান পাশ থেকে বামে স্ক্যান করে প্রথমটি খুঁজুন যেটি তার ডান পাশের চেয়ে ছোট।
  • সেটি স্ব্যাপ করুন ডান পাশের সবচেয়ে ছোট বড় অঙ্কের সাথে।
  • যদি অঙ্কগুলো নিরবক্রভাবে ছোট হয় (যেমন 54321), তবে -১ ফেরত দিন।

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

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

string getNextHigherNumber(string num) {
    int len = num.size();
    int firstIdx = -1;
    for (int i = len - 2; i >= 0; i--) {
        if (num[i] < num[len - 1]) { firstIdx = i; break; }
    }
    if (firstIdx == -1) return "-1";
    int secondIdx = -1;
    for (int i = len - 1; i > firstIdx; i--) {
        if (num[i] > num[firstIdx] && (secondIdx == -1 || num[i] <= num[secondIdx])) {
            secondIdx = i;
        }
    }
    swap(num[firstIdx], num[secondIdx]);
    return num;
}

int main() {
    string num = "12345";
    cout << "Given number: " << num << endl;
    cout << "Next higher number: " << getNextHigherNumber(num) << endl;
    return 0;
}

আউটপুট

Given number: 12345
Next higher number: 12354
  1. C++-এ অসুন্দর সংখ্যা (Ugly Number)

  2. C++-এ বাইনারি রিপ্রেজেন্টেশন থেকে নেক্সট নম্বর বের করা

  3. C++ ব্যবহার করে কার্টেসিয়ান প্লেনে বিন্দু অপসারণ করে একই অক্ষের একপাশে আনা

  4. C++-এ একটি ইন্টিজারর ওন'স কমপ্লিমেন্ট খুঁজে বের করা