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

C++-এ একটি অ্যারে পুনর্বিন্যাস করুন যাতে 'arr[j]' 'i' হয়ে যায় যদি 'arr[i]' 'j' হয়

আমাদের একটি ধনাত্মক পূর্ণসংখ্যা টাইপের অ্যারে দেওয়া আছে, ধরুন arr[] যেকোনো দেওয়া আকারের যাতে অ্যারেতে উপাদানগুলির মান ০-এর চেয়ে বড় কিন্তু অ্যারের আকারের চেয়ে ছোট। কাজটি হল অ্যারেটিকে এমনভাবে পুনর্বিন্যাস করা যাতে যদি arr[j] 'j' হয় তবে arr[j] 'i' হয়ে যায় এবং চূড়ান্ত ফলাফলটি প্রিন্ট করা হবে।

বিভিন্ন ইনপুট-আউটপুট পরিস্থিতি দেখে নিই -

ইনপুট - int arr[] = {3, 4, 1, 2, 0}

আউটপুট - পুনর্বিন্যাসের আগে অ্যারে: 3 4 1 2 0 অ্যারে পুনর্বিন্যাস যাতে arr[j] i হয়ে যায় যদি arr[i] j হয়: 4 2 3 0 1

ব্যাখ্যা - আমাদের আকার ৫-এর একটি পূর্ণসংখ্যা অ্যারে দেওয়া আছে এবং অ্যারেতে সকল উপাদানের মান ৫-এর চেয়ে কম। এখন আমরা অ্যারেটিকে পুনর্বিন্যাস করব: arr[1] = 4, arr[4] = 1; arr[2] = 1, arr[1] = 2; arr[3] = 2, arr[2] = 3; arr[4] = 0, arr[0] = 4। অতএব, চূড়ান্ত অ্যারে হল 4 2 3 0 1।

ইনপুট - int arr[] = {2, 0, 1, 3}

আউটপুট - পুনর্বিন্যাসের আগে অ্যারে: 2 0 1 3 অ্যারে পুনর্বিন্যাস যাতে arr[j] i হয়ে যায় যদি arr[i] j হয়: 1 2 0 3

ব্যাখ্যা - আমাদের আকার ৪-এর একটি পূর্ণসংখ্যা অ্যারে দেওয়া আছে এবং অ্যারেতে সকল উপাদানের মান ৪-এর চেয়ে কম। এখন আমরা অ্যারেটিকে পুনর্বিন্যাস করব: arr[0] = 2, arr[2] = 0; arr[1] = 0, arr[0] = 1; arr[2] = 1, arr[1] = 2; arr[3] = 3, arr[3] = 3। অতএব, চূড়ান্ত অ্যারে হল 1 2 0 3।

নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • পূর্ণসংখ্যা টাইপের উপাদান 지닌 একটি অ্যারে ইনপুট নিন এবং অ্যারের আকার গণনা করুন।
  • পুনর্বিন্যাসের আগে অ্যারে প্রিন্ট করুন এবং Rearrangement(arr, size) ফাংশনটি কল করুন।
  • Rearrangement(arr, size) ফাংশনের ভিতরে:
    • অ্যারে arr[]-এর আকারের সমান একটি ptr[] নামের পূর্ণসংখ্যা টাইপের অ্যারে তৈরি করুন।
    • i = ০ থেকে size পর্যন্ত একটি FOR লুপ শুরু করুন। লুপের ভিতরে ptr[arr[i]] = i সেট করুন।
    • i = ০ থেকে size পর্যন্ত একটি FOR লুপ শুরু করুন। লুপের ভিতরে arr[i] = ptr[i] সেট করুন।
  • মানগুলোর পুনর্বিন্যাসের পর অ্যারে প্রিন্ট করুন।

উদাহরণ

#include <bits/stdc++.h> 
using namespace std; 

void Rearrangement(int arr[], int size){ 
    int ptr[size]; 
    for(int i = 0; i < size; i++){ 
        ptr[arr[i]] = i; 
    } 
    for(int i = 0; i < size; i++){ 
        arr[i] = ptr[i]; 
    } 
} 

int main(){ 
    //একটি অ্যারে ইনপুট
    int arr[] = {3, 4, 1, 2, 0}; 
    int size = sizeof(arr) / sizeof(arr[0]); 
    //মূল অ্যারে প্রিন্ট
    cout<<"Array before Arrangement: "; 
    for (int i = 0; i < size; i++){ 
        cout << arr[i] << " "; 
    } 
    //অ্যারে পুনর্বিন্যাস করার জন্য ফাংশন কল
    Rearrangement(arr, size); 
    //মানগুলোর পুনর্বিন্যাসের পর অ্যারে প্রিন্ট
    cout<<"\nRearrangement of an array such that 'arr[j]' becomes 'i' if 'arr[i]' is 'j' is: "; 
    for(int i = 0; i < size; i++){ 
        cout<< arr[i] << " "; 
    } 
    return 0; 
}

আউটপুট

উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি জেনারেট হবে

Array before Arrangement: 3 4 1 2 0 Rearrangement of an array such that 'arr[j]' becomes 'i' if 'arr[i]' is 'j' is: 4 2 3 0 1
  1. সর্বনিম্ন x খুঁজে বের করা যাতে (x % k) * (x / k) == n C++-তে

  2. সি++ প্রোগ্রাম: সর্টেড অ্যারেতে জ্যামিতিক ধারা (Geometric Progression) গঠনকারী সব ট্রিপলেট (Triplet) খুঁজে বের করা

  3. C++ ব্যবহার করে অ্যারেতে a % b = k সেটি করার সব জোড়া (a, b) বের করা

  4. C++-এ অ্যারে ডিকে (Array Decay) কী?