Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พิมพ์อาร์เรย์สลับกันเพิ่มและลดใน C++

โจทย์

ให้อาร์เรย์ตัวเลข ต้องการพิมพ์ค่าออกมาเป็นลำดับสลับกันระหว่างเพิ่มและลด โดย:

  • 2 ตัวแรก เรียงเพิ่ม
  • 3 ตัวถัดไป เรียงลด
  • 4 ตัวถัดไป เรียงเพิ่ม
  • เพิ่มขึ้นทีละ 1 ทุกช่วง

ตัวอย่าง: 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)

อัลกอริทึม

Step 1: เรียงอาร์เรย์เพิ่ม
Step 2: left=0, right=n-1, flag=2
Step 3: while left <= right
    Step 4: ถ้า flag คู่ (เพิ่ม)
        พิมพ์จาก left ถึง left+flag
        อัปเดต left = i, flag++
    Step 5: ถ้า flag คี่ (ลด)
        พิมพ์จาก right ถึง right-flag
        อัปเดต right = i, flag++
Step 6: จบ

ตัวอย่างโค้ด C++

#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