কম্পিউটার

C প্রোগ্রামে প্রদত্ত অ্যারের বিভিন্ন সাজানো ক্রমিউটেশন প্রিন্ট করুন।


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

  1. O(n) সময়ে অ্যারের বাম ঘূর্ণন এবং C প্রোগ্রামে O(1) স্থান মুদ্রণ করুন।

  2. সি প্রোগ্রামে দেওয়া ম্যাট্রিক্সে শূন্যের সংখ্যা অনুসারে সাজানো কলামগুলির প্রিন্ট সূচক।

  3. সি প্রোগ্রামে আপেক্ষিক ক্রমে অ্যারের উপাদানগুলির শেষ ঘটনা প্রিন্ট করুন।

  4. পাইথন প্রোগ্রাম একটি প্রদত্ত স্ট্রিং এর সমস্ত স্থানান্তর প্রিন্ট করতে