| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Задача - комбинации цифр в стеке LIFO |
| Автор: galileopro 18.9.2015, 17:14 |
| Дан стек типа LIFO. Над ним производятся 10 операций "пуш" и 10 операций "поп" в произвольном порядке. Операции пуш помещают в стек одну цифру из ряда 0123456789 в прямом порядке. Операции поп выводят на экран 1 цифру и исключают ее из стека. Напишите метод, на вход которому подается произвольная комбинация из 10 цифр от 0 до 9 и он определяет, могла ли такая комбинация появится в результате тех 10 операций пуш и 10 операций поп. Помогите мне понять, как решить такую задачу. Какие есть идеи. Чтобы было понятно: 1) последовательность 0000000000 нельзя получить. Потому, что после того как будет push 0 следующая операция push может взять 1 символ из ряда 123456789. 2) Последовательность 6543217089 получена так 7 push 0123456 <- stack 6 pop 654321 <- console 1 push 07 <- stack 2 pop 65432170 <- console 1 push 8 1 pop 654321708 1 push 9 1 pop 6543217089 Задание сформулировано корректно. Почему именно так я не знаю. Уточнить негде. Это вся информация, которая есть. Как решить я не знаю. |
| Автор: LSD 18.9.2015, 20:09 |
| Интересная задачка Итак: - первый элемент может быть любой из ряда - дальше у нас 2 варианта: сразу выполнить еще один pop или сделать несколько push оставшихся элементов - значит следующий элемент это или предыдущий или любой из последующих (если есть) Для твоего примера 6543217089: - из ряда 0123456789 выкидываем 6 и ставим на его место указатель текущего элемента: 012345^789 - следующий элемент 5: проверяем что он один из предыдущих: это так, выкидываем его и ставим указатель на его место 01234^789 - повторяем до 1: 0^789 - следующий элемент 7 это не предыдущий но один из следующих, выкидываем его и ставим указатель на его место 0^89 - следующий элемент 0: проверяем что он один из предыдущих: это так, выкидываем его и ставим указатель на его место ^789 - следующий элемент 8, предыдущих нет, выкидываем его и ставим указатель на его место ^9 - следующий элемент 9, предыдущих нет, выкидываем его и остается пустой список |
| Автор: a0730 19.9.2015, 16:53 |
| не понял, почему нельзя получить последовательность 0000000000? push 0 pop 0 push 0 pop 0 и т.д. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Zadacha-kombinatsii-tsifr-v-steke-LIFO-id55fc1c6aae2015fc598b4568#findElement_E7045_55fd68d7ae201585667f5f1d_0 |
| Автор: galileopro 19.9.2015, 18:04 |
| push 0 pop 0 Дальше остается 123456789 над которыми можно производить операции пуш и поп. ПО условию эти пуш и поп производятся над 0123456789 в прямом порядке. |