এই সমস্যাতে, আমাদের একটি পজিটিভ ইন্টিজার দেওয়া আছে। আমাদের কাজ হল সর্বোচ্চ একবার সওয়াপ (Swap) অপারেশন ব্যবহার করে সবচেয়ে বড় সংখ্যা তৈরি করার প্রোগ্রাম তৈরি করা।
আমরা দেয়া সংখ্যার ডিজিট ব্যবহার করে একটি নতুন সংখ্যা তৈরি করব।
সবচেয়ে বড় সংখ্যা তৈরি করতে হলে শুধু এক জোড়া ডিজিট সওয়াপ করা যাবে।
উদাহরণ দেখি:
ইনপুট: n = 63512 আউটপুট: 65312
সমাধানের পদ্ধতি
একটি পদ্ধতি হল দেয়া সংখ্যার ডিজিটের সব জোড়া সওয়াপ করে তৈরি হওয়া সব সংখ্যা বের করা। সব সওয়াপড সংখ্যা থেকে সবচেয়ে বড়টি রিটার্ন করা। এর জন্য সংখ্যাকে স্ট্রিংয়ে কনভার্ট করে পজিশন সওয়াপ করব।
উদাহরণ
#include <iostream> using namespace std; int findLargestNumSwapDig(int N){ string strNum = to_string(N); string temp = strNum; for (int i = 0; i < strNum.size(); i++) { for (int j = i + 1; j < strNum.size(); j++) { swap(strNum[i], strNum[j]); if (stoi(strNum) > stoi(temp)) temp = strNum; swap(strNum[i], strNum[j]); } } return stoi(temp); } int main(){ int num = 792156; cout<<"The number is "<<num<<endl; cout<<"The largest number created by swapping one digit is "<<findLargestNumSwapDig(num) << endl; return 0; }
আউটপুট
The number is 792156 The largest number created by swapping one digit is972156
আরেকটি পদ্ধতি
আরেকটি পদ্ধতি হল সওয়াপটি খুঁজে বের করা যেটি সর্বোচ্চ বড় সংখ্যা তৈরি করবে। এর জন্য, আমরা সংখ্যাকে বাম থেকে ডানে স্ক্যান করব। এবং প্রথম সেই জোড়াটি সওয়াপ করব যেটির পরবর্তী ডিজিটটি পূর্বের ডিজিটের চেয়ে বড়। এই সওয়াপই সর্বোচ্চ বড় সংখ্যা তৈরি করবে।
উদাহরণ
#include <iostream> using namespace std; int findLargestNumSwapDig(int N){ int currMaxDig = -1; int currMaxInd = -1; int lSwap = -1; int rSwap = -1; string strNum = to_string(N); for (int i = strNum.size() - 1; i >= 0; i--) { if (strNum[i] > currMaxDig) { currMaxDig = strNum[i]; currMaxInd = i; continue; } if (strNum[i] < currMaxDig) { lSwap = i; rSwap = currMaxInd; } } if (lSwap == -1) return N; swap(strNum[lSwap], strNum[rSwap]); return stoi(strNum); } int main(){ int num = 792156; cout<<"The number is "<<num<<endl; cout<<"The largest number created by swapping one digit is "<<findLargestNumSwapDig(num) << endl; return 0; }
আউটপুট
The number is 792156 The largest number created by swapping one digit is972156