Страница 1 из 1

Перебор со "сдвигом"...?

Добавлено: 12 апр 2008, 12:08
Fax
Преветствую всех посетивших темку!

Есть задачка: реализовать алгоритм на беисике. Задача заключается в следующем.
Имеется группа чисел, состоящих из 5-ок и 4-ок. Известно общее количество чисел
в группе. Известно также, что 5-ки находятся справа, а четверки слева, например:

Группа состоит из 5 чисел, в которой две 5-ки слева, три 4-ки справа: 55444

Необходимо переместить 5-ки вправо, 4-ки влево согласно алгоритму:

Шаг Действие
0 55444 - имеем
1 54544
2 45544
3 54454
4 45454
5 44554
6 54445
7 45445
8 44545
9 44455 - надо получить

Получается перебор вариантов со сдвигом 5-ок вправо, а 4-ок влево.
Помогите чем сможите, может ссылочку подкините. Сам пробовал искать ничего
похожего пока не нашёл.

Re: Перебор со "сдвигом"...?

Добавлено: 12 апр 2008, 15:31
Fax
Нет ни у кого мыслишек по этому поводу? Я третий день пытаюсь, пока не нашёл
ничего разумного

Re: Перебор со "сдвигом"...?

Добавлено: 12 апр 2008, 17:05
somewhere
Просто правило вашего сдвига какое-то нелогичное и хитрое
Я бы еще понял если бы, например
55444
54544
45544
45454
44554
44545
44455 - тогда понятно, ну или
55444
45544
44554
44455 - это совсем просто, а у вас пятерки как-то скачут отбалды

Re: Перебор со "сдвигом"...?

Добавлено: 12 апр 2008, 18:05
Fax
Задача заключается в том, что не обходимо перебрать все возможные комбинации,
не нарушая количества пятёрок и четвёрок.
Ваш алгоритм не предусматривает всех комбинаций.

Смотрите, в моих последовательностях есть такие комбинации: 54445, 54454
В ваших их нет. А все комбинации, что написали вы, в моих комбинациях есть.
Плюс порядок, его необходимо соблюсти как в моем алгоритме.
Улавливаете мысль. Было бы всё так просто, то я бы и не обратился к форумчанам.
Есть ещё мысли?

Re: Перебор со "сдвигом"...?

Добавлено: 12 апр 2008, 18:26
somewhere
Блин - если вам понятен порядок, то почему бы его здесь не объяснить? Я могу сказать как получить все возможные варианты, но я не пойму в какой последовательности они должны идти.

Re: Перебор со "сдвигом"...?

Добавлено: 12 апр 2008, 18:51
Fax
Возражение принимаю. Объясняю.

Имеем 55444. Пятёрка в первом разряде слева неможет переместится на второй разряд слева, поскольку там пятёрка. Она сдвигает пятёрку второго разряда слева на третий разряд получаем: 54544. Далее путь свободен, во втором разряде
четвёрка, и пятёрка с первого разряда перемещается на второй: 45544. Далее
пятёрка во втором разряде не может переместиться на третий разряд из-за
пятёрки в третем разряде. Пятёрка второго разряда сдвигает пятёрку третего разряда на четвёртый разряд, а сама возвращается на первый слева разряд: 54454.
Далее путь первой слева пятёрки свободен до третьего разряда: 45454, 44554.
И так далее. Получается некий сдвиг, при этом не нарушается условие задачи
и комбинации не повторяются.

Re: Перебор со "сдвигом"...?

Добавлено: 13 апр 2008, 10:59
Fax
Всё, нашел способ реализации. Расписывать не буду, времени мало.
Всем спасибо за внимание.

Re: Перебор со "сдвигом"...?

Добавлено: 13 апр 2008, 11:45
BHy4ok
Это что то из разряда пузырьковой сортировки получается. Только еще поставить условие можно
[syntax='Delphi']
if a = a[i+1] then a := a[0];
[/syntax]