इस समस्या में, हमें संख्या की एक सरणी दी जाती है और हमें प्रिंट करते समय वैकल्पिक रूप से बढ़ते और घटते क्रम में सरणी के तत्वों को प्रिंट करना होता है। वैकल्पिक क्रम इस प्रकार होगा कि पहले दो तत्व बढ़ते क्रम में हों और फिर अगले तीन तत्व घटते क्रम में हों और अगले चार आरोही क्रम में हों।
आइए समस्या को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं,
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