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

C++-এ বাইনারি রিপ্রেজেন্টেশনে সার্কুলার পারমুটেশন


দুটি পূর্ণসংখ্যা n আর start দেওয়া আছে। আমাদের যেকোনো পারমুটেশন p ফেরত দিতে হবে যেটি (0,1,2.....,2^n -1)-এর এবং নিচের শর্তগুলো পূরণ করে:

  • p[0] = start
  • p[i] আর p[i+1] তাদের বাইনারি রিপ্রেজেন্টেশনে শুধু এক বিটে পার্থক্য রাখে।
  • p[0] আর p[2^n -1]ও শুধু এক বিটে পার্থক্য রাখে।

উদাহরণস্বরূপ, n = 2, start = 3 হলে ফেরত আসবে [3,2,0,1], যেগুলোর বাইনারি: [11,10,00,01]।

সমাধানের ধাপগুলো:

  • ans একটা অ্যারে।
  • i = 0 থেকে 2^n - 1 পর্যন্ত: ans-এ start XOR i XOR (i/2) ঢোকান।
  • ans ফেরত দিন।

নিচের ইমপ্লিমেন্টেশনটি দেখুন:

উদাহরণ

#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){    cout << "[";    for(int i = 0; i<v.size(); i++){          cout << v[i] << ", ";    }    cout << "]"<<endl; } class Solution { public:    vector<int> circularPermutation(int n, int start) {       vector <int> ans;       for(int i = 0 ; i < 1<<n; i++){          ans.push_back(start ^ i ^(i>>1));       }       return ans;    } }; main(){    Solution ob;    print_vector(ob.circularPermutation(5,3)); }

ইনপুট

5 3

আউটপুট

[3, 2, 0, 1, 5, 4, 6, 7, 15, 14, 12, 13, 9, 8, 10, 11, 27, 26, 24, 25, 29, 28, 30, 31, 23, 22, 20, 21, 17, 16, 18, 19, ]

  1. C++-এ বাইনারি রিপ্রেজেন্টেশন থেকে প্রিভিয়াস নম্বর বের করা

  2. C++-এ বাইনারি রিপ্রেজেন্টেশন থেকে নেক্সট নম্বর বের করা

  3. দেওয়া সংখ্যার বাইনারি রিপ্রেজেন্টেশন C++-এ

  4. পাইথনে একটি সংখ্যার বাইনারি রিপ্রেজেন্টেশন প্যালিনড্রোম কিনা