Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Задача - комбинации цифр в стеке 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
Интересная задачка smile

Итак:
- первый элемент может быть любой из ряда
- дальше у нас 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 в прямом порядке.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)