N পূর্ণসংখ্যা সম্বলিত একটি অ্যারে দেওয়া, চ্যালেঞ্জ হল k সূচকগুলির বিভিন্ন স্থানান্তর মুদ্রণ করা যাতে এই সূচকগুলির মানগুলি একটি অ-হ্রাস না হওয়া ক্রম তৈরি করে। প্রিন্ট -1 সম্ভব না হলে।
উদাহরণ
Input: arr[] = {2,5,6,2,2,2,2}, k = 4
Output:
0 3 4 5 6 1 2
3 0 4 5 6 1 2
0 3 4 5 6 1 2
3 0 4 5 6 1 2 প্রদত্ত অ্যারে সাজান এবং প্রতিটি উপাদানের মূল সূচকগুলির উপর নজর রাখুন। এটি একটি প্রয়োজনীয় স্থানান্তর দেয়। এখন যদি যেকোন 2টি অবিচ্ছিন্ন উপাদান সমান হয় তবে সেগুলিকে অন্য স্থানান্তর পেতে অদলবদল করা যেতে পারে। একইভাবে, তৃতীয় স্থানান্তর তৈরি করা যেতে পারে।
অ্যালগরিদম
START
Step 1 -> Declare Function void indice(int n, pair<int, int> array[])
Loop For int i=0 and i<n and i++
Print array[i].second
End
Step 2 -> Declare Function void permutation(int n, int a[], int k)
Use STL pair<int, int> arr[n]
Loop for int i=0 and i<n and i++
Set arr[i].first = a[i]
Set arr[i].second = i
End
Call sort(arr, arr + n)
Declare int count to 1
Loop For int i=1 and i<n and i++
IF (arr[i].first == arr[i - 1].first)
Increment count by 1
End
End
IF count < k
Return -1
End
Loop For int i = 0 and i < k – 1 and i++
Call indice(n, arr)
Loop For int j = 1 and j < n and j++
IF arr[j].first == arr[j - 1].first
Call swap(arr[j], arr[j - 1])
Break
End
End
End
Call indice(n, arr)
Step 3 -> In main()
Declare array a[]={2,5,6,2,2,2,2}
Declare int n= sizeof(a)/sizeof(a[0])
Declare int k=4
Call permutation(n,a,k)
STOP উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void indice(int n, pair<int, int> array[]){
for (int i = 0; i < n; i++)
cout << array[i].second << " ";
cout << endl;
}
void permutation(int n, int a[], int k){
pair<int, int> arr[n];
for (int i = 0; i < n; i++){
arr[i].first = a[i];
arr[i].second = i;
}
sort(arr, arr + n);
int count = 1;
for (int i = 1; i < n; i++)
if (arr[i].first == arr[i - 1].first)
count++;
if (count < k){
cout << "-1";
return;
}
for (int i = 0; i < k - 1; i++){
indice(n, arr);
for (int j = 1; j < n; j++){
if (arr[j].first == arr[j - 1].first){
swap(arr[j], arr[j - 1]);
break;
}
}
}
indice(n, arr);
}
int main(){
int a[] ={2,5,6,2,2,2,2};
int n = sizeof(a) / sizeof(a[0]);
int k = 4;
permutation(n, a, k);
return 0;
} আউটপুট
যদি আমরা উপরের প্রোগ্রামটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে
0 3 4 5 6 1 2 3 0 4 5 6 1 2 0 3 4 5 6 1 2 3 0 4 5 6 1 2