0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 7
|
||||||
1 | ||||||
Сдвиг нулей в конец массива25.11.2013, 16:11. Показов 5157. Ответов 13
Метки нет (Все метки)
Извините, если данная тема уже поднималась(к сожалению, я таковой на C++ не нашёл).
Суть задачи: нужно отсортировать элементы массива таким образом, чтобы нули сдвинулись в конец, а все остальные элементы сохранили свой порядок. Проблема в том, что программа заканчивается после первого "сдвинутого" нуля. Вот, что у меня получилось:
0
|
25.11.2013, 16:11 | |
Ответы с готовыми решениями:
13
Сдвиг элемента массива в конец этого массива Добавить вместо удаленных нулей -1 в конец массива Сдвиг целой строки двухмерного массива в конец Битовый сдвиг - вывод достаточного количества нулей |
55 / 48 / 13
Регистрация: 31.10.2013
Сообщений: 166
|
||||||
25.11.2013, 16:29 | 2 | |||||
С таким условием выбора как:
0
|
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 7
|
|
25.11.2013, 16:36 [ТС] | 3 |
Спасибо большое. Логично, не подумал. А что тогда делать?
Добавлено через 1 минуту Привязываться как-то только к самому элементу Array[i]? Добавлено через 1 минуту Но один ноль, даже с такой проверкой, сбрасывается в конец. 10025 переходит в 10250(0 с 2 меняется, а затем с 5). Добавлено через 1 минуту Думал, может, можно сделать какой-нибудь внешний цикл, осуществляющий проверку? Но, как-то в голову не приходит. В любом случае, буду благодарен за любое решение.
0
|
12 / 12 / 2
Регистрация: 09.11.2013
Сообщений: 85
|
||||||
25.11.2013, 16:37 | 4 | |||||
У тебя предыдущее число же не проверяется. Сначала меняются нули местами, на втором шаге, на третьем он видит 0 и меняет его местами, на четвертом так же, а нуль на втором шаге - остается
Как-то так
0
|
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 7
|
|
25.11.2013, 16:43 [ТС] | 5 |
Честно говоря, не совсем Вас понял. Код работает. Проблема возникает, если нулей несколько.
Добавлено через 2 минуты Вы все верно объяснили, но я это и сам понимаю. Меня интересует полностью рабочие варианты: иной вариант проверки, дополнительные цикл, etc. Добавлено через 2 минуты Спасибо, сейчас проверю.
0
|
12 / 12 / 2
Регистрация: 09.11.2013
Сообщений: 85
|
|
25.11.2013, 16:43 | 6 |
1
|
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 7
|
|
25.11.2013, 17:01 [ТС] | 7 |
Спасибо, IntelCoreDuo. Всё работает.
Добавлено через 13 минут К сожалению, проблема полностью не решилась. Если нулей больше 2 подряд, то программа не работает должным образом. Добавлено через 22 секунды Может, у кого-нибудь есть светлые мысли?
0
|
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
|
||||||
25.11.2013, 17:03 | 8 | |||||
Как вариант
0
|
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 7
|
|
25.11.2013, 17:07 [ТС] | 9 |
MicM, нужен динамический массив.
0
|
12 / 12 / 2
Регистрация: 09.11.2013
Сообщений: 85
|
|
25.11.2013, 17:13 | 10 |
Нужно менять 0 с последней переменной в массиве. Если последняя уже равна нулю, то менять 0 с (последней - 1). Перебором, вижу, сложновато. Хотя и здесь не без сложностей.
0
|
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 7
|
|
25.11.2013, 17:16 [ТС] | 11 |
Выходит, что иного выхода, помимо создания нового массива - нет? При учёте того, что нужен динамический массив.
0
|
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
|
|
25.11.2013, 17:18 | 12 |
ТС написал:
Если нулевые элементы менять с последним элементом, то порядок следования нарушится
0
|
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 7
|
|
25.11.2013, 17:48 [ТС] | 13 |
MicM, можно ли обойтись без нового массива? Или для динамического иных вариантов нет?
Добавлено через 23 минуты Решения, без создания нового массива, нет?
0
|
55 / 48 / 13
Регистрация: 31.10.2013
Сообщений: 166
|
||||||
25.11.2013, 21:05 | 14 | |||||
решение есть сделать все в одном массиве, я просто не успел написать с работы уходить пора уже было. Вот как я это вижу:
2
|
25.11.2013, 21:05 | |
25.11.2013, 21:05 | |
Помогаю со студенческими работами здесь
14
Определить, сколько нулей в последовательности. Конец ввода 666 Массив строк. Конец строки и конец массива Логический сдвиг влево,логический сдвиг вправо,алгоритм обмена двух переменных,циклический сдвиг Выполнить сдвиг элементов массива влево на 1 ячейку, начиная с позиции максимального элемента массива Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |