इस समस्या में, हमें संख्याओं की एक सरणी दी गई है और हमें प्रिंट करते समय सरणी के तत्वों को वैकल्पिक रूप से बढ़ते और घटते क्रम में प्रिंट करना है। वैकल्पिक क्रम इस तरह होगा कि पहले दो तत्व बढ़ते क्रम में हों और फिर अगले तीन तत्व घटते क्रम में फिर अगले चार आरोही क्रम में।
आइए एक उदाहरण लेकर इस समस्या को बेहतर ढंग से समझते हैं,
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 हैं)।
इस समस्या को हल करने के लिए, हम पहले सरणी को आरोही क्रम में सॉर्ट करेंगे। अब, हम दो पॉइंटर्स का उपयोग करेंगे, एक शुरुआत से तत्व प्रिंट करने के लिए और एक अंत से तत्व प्रिंट करने के लिए। हम एक फ्लैग तत्व का भी उपयोग करेंगे ताकि यह जांचा जा सके कि प्रिंट शुरुआत से करना है या अंत से।
एल्गोरिदम
चरण 1 : सरणी के तत्वों को सॉर्ट करें। चरण 2 : left = 0 , right = n-1 , flag = 2 आरंभ करें। चरण 3 : जब l, r से कम या बराबर हो। करें : चरण 4 : यदि flag%2 == 0। करें : चरण 4.1 : i = left से left + flag तक लूप करें। और arr[i] प्रिंट करें। चरण 4.2 : left = i अपडेट करें ; flag ++; चरण 5 : अन्यथा। करें : चरण 5.1 : i = right से right - flag तक लूप करें। और arr[i] प्रिंट करें। चरण 5.2 : right = i और flag ++ अपडेट करें। चरण 6 : बाहर निकलें
उदाहरण
अब, इस एल्गोरिदम के कार्यान्वयन को दर्शाने वाला एक प्रोग्राम बनाते हैं।
#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