用 C++ 列印陣列元素交替遞增和遞減
在這個問題中,我們得到一個數字陣列,我們需要按照交替遞增和遞減的順序列印陣列的元素。交替順序是這樣的:前兩個元素遞增,接下來的三個元素遞減,再接下來的四個元素遞增,以此類推。
讓我們舉個例子來更好地理解這個問題,
Input : {1, 4, 0, 2, 7, 9, 3} Output : 0 1 9 7 4 2 3
說明 - 元素按遞增順序排列的陣列為 0 1 2 3 4 7 9。前兩個元素為 0 1。最後三個元素為 9 7 4。接下來的四個元素為 2 3(我們可以取四個元素,但陣列中只有兩個)。
為了解決這個問題,我們首先將陣列按升序排序。現在,我們將使用兩個指標,一個用於從開頭列印元素,另一個用於從結尾列印元素。我們還將使用一個標誌元素來檢查列印是從開頭進行還是從結尾進行。
演算法
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
廣告