#include <iostream>

using namespace std;

void func(int *p, int n);

int main() {

    int arr[6] = {0};
    for (int &i: arr) {
        cin >> i;
    }

    func(arr, 6);

    for (int i = 0; i < 6; i++) {
        if (i == 5) {
            cout << arr[i] << endl;
        } else {
            cout << arr[i] << " ";
        }
    }

    return 0;
}

void func(int *p, int n) {
    int zerosMoved = 0; // 记录已经移动的零元素数量
    for (int i = 0; i < n - zerosMoved;) {
        if (*(p + i) != 0) {
            i++;
        } else {
            for (int j = i; j < n - 1; j++) {
                *(p + j) = *(p + j + 1);
            }
            *(p + n - 1) = 0;
            zerosMoved++; // 零元素数量增加
        }
    }
}

移动法实现,但是时间复杂度是$O(n^2)$,更好的办法就是双指针。