এই সমস্যায়, আমরা একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়. আমাদের কাজ হল সর্বাধিক একটি সোয়াপ অপারেশন ব্যবহার করে ছোট সংখ্যা গঠনের জন্য একটি প্রোগ্রাম তৈরি করা।
আমরা বিদ্যমান সংখ্যার সংখ্যা ব্যবহার করে একটি নতুন নম্বর তৈরি করব। গঠিত ক্ষুদ্রতম সংখ্যাটি বিদ্যমান সংখ্যা থেকে শুধুমাত্র একটি সংখ্যা অদলবদল করতে পারে।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক
Input: n = 63519 Output: 36519
সমাধান পদ্ধতি
সমস্যা সমাধানের একটি পদ্ধতি হল প্রদত্ত সংখ্যার সংখ্যার জোড়া অদলবদল করে তৈরি করা সমস্ত সংখ্যা খুঁজে বের করা। এই সমস্ত অদলবদল করা সংখ্যার মধ্যে, সবচেয়ে ছোটটি ফেরত দেওয়া হয়। এর জন্য, আমরা সংখ্যাটিকে স্ট্রিং এবং সোয়াপ পজিশনে রূপান্তর করব।
উদাহরণ
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম
#include <iostream> using namespace std; int findSmallestNumSwapDig(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 smallest number created by swapping one digit is "<<findSmallestNumSwapDig(num) << endl; return 0; }
আউটপুট
The number is 792156 The smallest number created by swapping one digit is192756
অন্য পদ্ধতি
সমস্যা সমাধানের আরও একটি পদ্ধতি হল একটি অতিরিক্ত সহায়ক অ্যারে aux[] ব্যবহার করে। এই অ্যারেটি বর্তমান সূচকের ডানদিকে (বৃহত্তর সূচক) ক্ষুদ্রতম অঙ্কের সূচক সংরক্ষণ করতে ব্যবহৃত হয় অর্থাৎ aux[i] হল সংখ্যার অঙ্কের ডানদিকে ক্ষুদ্রতম অঙ্কের সূচক। সূচনা করুন aux[i] =-1, যদি এমন কোনো সংখ্যা না থাকে। এখন, সূচক 0 থেকে n-1 পর্যন্ত সংখ্যাটি অতিক্রম করুন এবং aux[] অ্যারেতে সংখ্যাটি খুঁজুন যা বর্তমান মানের থেকে ছোট। সূচক 0 মানের জন্য, অ-শূন্য উপাদানের জন্য পরীক্ষা করুন, যদি 0 হয় তাহলে মানটি বাতিল করুন। যদি কোনো উপাদান পাওয়া যায়, arr[i] এবং arr[aux[i]] অদলবদল করুন এবং তৈরি করা নম্বর ফেরত দিন।
উদাহরণ
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম
#include <bits/stdc++.h> using namespace std; int findSmallestNumSwapDig(int N){ string num = to_string(N); int n = num.size(); int auxArr[n], right; auxArr[n - 1] = -1; right = n - 1; for (int i = n - 2; i >= 1; i--) { if (num[i] >= num[right]) auxArr[i] = right; else { if (num[i] == num[i + 1]) auxArr[i] = right; else { auxArr[i] = -1; right = i; } } } int small = -1; for (int i = 1; i < n; i++) if (num[i] != '0') { if (small == -1) { if (num[i] < num[0]) small = i; } else if (num[i] <= num[small]) small = i; } if (small != -1) swap(num[0], num[small]); else { for (int i = 1; i < n; i++) { if (auxArr[i] != -1 && num[i] != num[auxArr[i]]) { swap(num[i], num[auxArr[i]]); break; } } } return stoi(num); } int main(){ int num = 792156; cout<<"The number is "<<num<<endl; cout<<"The smallest number created by swapping one digit is" <<findSmallestNumSwapDig(num)<< endl; return 0; }
আউটপুট
The number is 792156 The smallest number created by swapping one digit is192756