Обнуление значений в массиве
Мне было дано задание: сделать так, чтобы после ввода массива А все его элементы меньше или равные 1 были удалены, а освободившиеся места заполнились в конце и нолями (т.е. преобразование {2, 45, 1, 3} в {2, 45, 3, 0}, {0, 9, 4, 1, 8} в {9, 4, 8, 0, 0} и т.д.). Запрещено менять порядок (не считая сдвига из примера) и использовать другие массивы.
Решение пока что сырое (не прикрутил ввод массива и не учёл вариант, где два элемента меньше или равные 1 встречаются подряд):
#include <array>
using namespace std;
int main()
{
int deleteNum = 0;
int A [6] {1, 5, 4, 3, 9, 4}; //случайные цифры, для проверок я периодически их меняю
int longA = end(A)-begin(A);
for(int i = 0; i < longA; i++) {
if (A[i] <= 1) {
for (int u = i; u < (longA - deleteNum); u++) {
A[u] = A[u + 1];
}
A[longA - 1 - deleteNum] = 0;
deleteNum += 1;
}
}
cout << A[0] << A[1] << A[2] << A[3] << A[4] << A[5];
return 0;
}
Во время проверки я обнаружил странную вещь. Практически при любом положении 1 в массиве, на выводе появляется лишний ноль, а то и несколько:
{9, 6, 4, 7, 1, 9} => {9, 6, 4, 7, 0, 0}
{1, 6, 4, 1, 8, 9} => {6, 4, 0, 0, 0, 0}
Подскажите, пожалуйста, что я делаю не так (а если кто посоветует, как решить вариант с двумя и более идущими подряд единицами, то ему отдельное спасибо).