ИГ
Игорь Грачев

Лёгкая задача с массивом на C++

Visual studio C++ 2010.
Задача: переместить все элементы массива, равные нулю, в конец, не изменяя порядка следования неравных нулю элементов.
У меня получилось вот так: Увеличить
Проблема: этот алгоритм не действует, когда по-очереди идут 2 элемента, равных 0, т. к. первый из них становится равным второму, опять же нулю.

Помогите пожалуйста. Заранее спасибо!

Нажмите на картинку, чтобы увидеть полный код

Ро
Ромка

Вот так вроде оптимально:
// пример для 10
char m[10] = {1,0,2,0,0,3,4,5,6,0};
int sm = 0; // кол. нулей - сдвиг на сколько данные сместить
for(int i=0; i<10; i++)
{
if(m[ i ]==0) sm++; // кол. нулей увел.
else if(sm != 0) m[ i-sm ] = m[ i ]; // присвоение только если был хоть 1 ноль
}

// обнуление последних
for(int i=10-sm; i<10; i++) m[ i ] = 0;

НН
Настенька Новикова

если легкая, то в чем проблема?

Похожие вопросы
Задача c массивами на языке java
задача про массивы (C++) [1]
C/C++ -Помогите решить задачу или подтолкните в нужную сторону (МАССИВЫ)
Символьные массивы на C.
C++ Двумерные массивы
Где можно посмотреть задачи на циклы и массивы (C++)
Borland C++, не могу понять суть задачи по массивам.
C# помощь по массиву.
Двумерные массивы в C++
Помогите решить задачу по информатике. Массивы на языке C!