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

একই ডিজিট সেট দিয়ে নেক্সট গ্রেটার নম্বর খুঁজে বের করা C++-এ

এই সমস্যায়, আমাদের একটি এলিমেন্ট N দেওয়া আছে। আমাদের কাজ হল একই সেট অফ ডিজিট দিয়ে নেক্সট গ্রেটার নম্বর খুঁজে বের করা। অর্থাৎ একই ডিজিট দিয়ে তৈরি সবচেয়ে ছোট সংখ্যা যা N-এর চেয়ে বড়।

উদাহরণ

ইনপুট

N = "92534"

আউটপুট

92543

সমাধানের পদ্ধতি

এই সমস্যার সহজ সমাধান হল নেক্সট গ্রেটার এলিমেন্ট বের করার নিচের পদ্ধতি:

  • নাম্বারটি লিস্ট সিগনিফিকেন্ট বিট থেকে মোস্ট সিগনিফিকেন্ট বিট দিকে ট্রাভার্স করুন। এবং থামুন যখন বর্তমান এলিমেন্ট গত এলিমেন্ট থেকে ছোট।
  • এই পর বাকি অ্যারেতে সবচেয়ে ছোট এলিমেন্ট সার্চ করুন। এবং সেটিকে সংখ্যার সাথে সোয়াপ করুন।
  • তারপর বাকি সাবঅ্যারে সর্ট করুন এবং আউটপুট রিটার্ন করুন।

প্রোগ্রাম উদাহরণ

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

void findNextGreater(char number[], int n) {
    int i, j;
    
    // ডান থেকে বামে প্রথম বড় ডিজিট খুঁজুন
    for (i = n - 1; i > 0; i--)
        if (number[i] > number[i - 1])
            break;
    
    if (i == 0) {
        cout << "Next number is not possible";
        return;
    }
    
    int x = number[i - 1], smallest = i;
    
    // ডান পাশে x-এর চেয়ে বড় সবচেয়ে ছোট ডিজিট খুঁজুন
    for (j = i + 1; j < n; j++)
        if (number[j] > x && number[j] < number[smallest])
            smallest = j;
    
    // সোয়াপ
    char temp = number[smallest];
    number[smallest] = number[i - 1];
    number[i - 1] = temp;
    
    // বাকি অংশ সর্ট
    sort(number + i, number + n);
    
    cout << number;
    return;
}

int main() {
    char number[] = "92534";
    int n = strlen(number);
    cout << "The next number with same set of digits is ";
    findNextGreater(number, n);
    return 0;
}

আউটপুট

The next number with same set of digits is 92543
  1. C++-এ একই ডিজিট দিয়ে N-র চেয়ে ছোট সর্বোচ্চ সংখ্যা বের করুন

  2. C++-এ একই সংখ্যক সেট বিট 가진 সর্বোচ্চ সংখ্যক কন্টiguous অ্যারে উপাদান

  3. সি++ প্রোগ্রাম: দেওয়া সংখ্যার চেয়ে বড় পরবর্তী পূর্ণবর্গ নির্ণয়

  4. সি++ প্রোগ্রাম: D দিয়ে বিভাজ্য N অঙ্কের সংখ্যা খুঁজে বের করা