Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 증가 및 감소 순서로 배열 요소 인쇄

<시간/>

이 문제에서는 숫자 배열이 주어지고 인쇄하는 동안 배열의 요소를 교대로 증가 및 감소 순서로 인쇄해야 합니다. 대체 순서는 첫 번째 두 요소가 오름차순으로 정렬된 다음 다음 세 요소가 내림차순으로 다시 정렬되는 방식입니다. 다음 네 개는 오름차순입니다.

문제를 더 잘 이해하기 위해 예를 들어보겠습니다.

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