এই সমস্যায়, আমাদের সংখ্যার একটি অ্যারে দেওয়া হয়েছে এবং প্রিন্ট করার সময় আমাদের বিকল্পভাবে বৃদ্ধি এবং হ্রাসের ক্রমে অ্যারের উপাদানগুলিকে প্রিন্ট করতে হবে। বিকল্প ক্রমটি এমনভাবে হবে যাতে প্রথম দুটি উপাদান ক্রমবর্ধমান ক্রমে থাকে এবং তারপরের তিনটি উপাদান হ্রাস ক্রমে থাকে আবার পরের চারটি আরোহী ক্রমে থাকে৷
সমস্যাটি আরও ভালভাবে বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
Input : {1, 4, 0, 2, 7, 9, 3} Output : 0 1 9 7 4 2 3
ব্যাখ্যা − উপাদানগুলির ক্রমবর্ধমান বিন্যাস হল 0 1 2 3 4 7 9। প্রথম 2টি উপাদান হল 0 1। শেষ 3টি উপাদান হল 9 7 4। পরবর্তী 4টি চারটি উপাদান হল 2 3 (আমরা 4টি উপাদান নিতে পারি কিন্তু আছে অ্যারেতে মাত্র 2)।
এই সমস্যাটি সমাধানের জন্য, আমরা প্রথমে অ্যারেটিকে আরোহী ক্রমে সাজাব। এখন, আমরা দুটি পয়েন্টার ব্যবহার করব একটি শুরু থেকে এলিমেন্ট প্রিন্ট করার জন্য এবং আরেকটি শেষের জন্য প্রিন্টিং এলিমেন্টের জন্য। মুদ্রণটি শুরু থেকে বা শেষ থেকে করা হবে কিনা তা পরীক্ষা করতে আমরা একটি পতাকা উপাদানও ব্যবহার করব।
অ্যালগরিদম
Step 1 : Sort elements of the array. Step 2 : Initialise left = 0 , right = n-1 , flag = 2. Step 3 : while l is less than equal to r. Do : Step 4 : If flag%2 == 0. Do : Step 4.1 : loop from i = left to left + flag. And print arr[i]. Step 4.2 : update left = i ; flag ++; Step 5 : else. Do : Step 5.1 : loop from i = right to right - flag. And print arr[i]. Step 5.2 : update right = i and flag ++. Step 6 : EXIT
উদাহরণ
এখন, এই অ্যালগরিদমের কাজটি ব্যাখ্যা করার জন্য একটি প্রোগ্রাম তৈরি করা যাক।
#include <bits/stdc++.h> using namespace std; void printAlternateSeq(int arr[], int n){ sort(arr, arr + n); int left = 0, right = n - 1, flag = 2, i; while (left <= right) { if (flag%2 == 0) { for (i = left; i < left + flag && i <= right; i++) cout<<arr[i]<<" "; left = i; } else { for (i = right; i > right - flag && i >= left; i--) cout<<arr[i]<<" "; right = i; } flag++; } } int main(){ int n = 6; int arr[] = {23, 45, 78, 32, 89, 10 }; printAlternateSeq(arr, n); return 0; }
আউটপুট
10 23 89 78 45 32