Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chuyển mảng thành dạng Zig-Zag trong C++


Cho mảng các phần tử khác nhau. Sắp xếp lại thành zig-zag: a < b > c < d > e ...

Input: {4, 3, 7, 8, 6, 2, 1} Output: 3 7 4 8 2 6 1

Giải pháp: Duyệt mảng, dùng flag xen kẽ. Nếu flag=true mong muốn arr[i] < arr[i+1], ngược lại arr[i] > arr[i+1]. Swap nếu không thỏa.

Chương trình minh họa

#include <iostream>
using namespace std;
void convert_zigzag(int arr[], int n){
    bool flag = true; // true: <, false: >
    for (int i = 0; i <= n-2; i++){
        if (flag){
            if (arr[i] > arr[i+1]) swap(arr[i], arr[i+1]);
        } else {
            if (arr[i] < arr[i+1]) swap(arr[i], arr[i+1]);
        }
        flag = !flag;
    }
}
int main(){
    int arr[] = {4, 3, 7, 8, 6, 2, 1};
    int n = sizeof(arr)/sizeof(arr[0]);
    convert_zigzag(arr, n);
    for (int i = 0; i < n; i++) cout << arr[i] << " ";
    return 0;
}

Kết quả

3 7 4 8 2 6 1