用 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

更新于: 2020年1月3日

384 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.