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

Алгоритмы: от сортировки пузырьком до численных методов

Модераторы: C_O_D_E, DeeJayC

Ответить
Fax
Сообщения: 6
Зарегистрирован: 12 апр 2008, 11:33

Преветствую всех посетивших темку!

Есть задачка: реализовать алгоритм на беисике. Задача заключается в следующем.
Имеется группа чисел, состоящих из 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-ок влево.
Помогите чем сможите, может ссылочку подкините. Сам пробовал искать ничего
похожего пока не нашёл.
Fax
Сообщения: 6
Зарегистрирован: 12 апр 2008, 11:33

Нет ни у кого мыслишек по этому поводу? Я третий день пытаюсь, пока не нашёл
ничего разумного
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Просто правило вашего сдвига какое-то нелогичное и хитрое
Я бы еще понял если бы, например
55444
54544
45544
45454
44554
44545
44455 - тогда понятно, ну или
55444
45544
44554
44455 - это совсем просто, а у вас пятерки как-то скачут отбалды
It's a long way to the top if you wanna rock'n'roll
Fax
Сообщения: 6
Зарегистрирован: 12 апр 2008, 11:33

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

Смотрите, в моих последовательностях есть такие комбинации: 54445, 54454
В ваших их нет. А все комбинации, что написали вы, в моих комбинациях есть.
Плюс порядок, его необходимо соблюсти как в моем алгоритме.
Улавливаете мысль. Было бы всё так просто, то я бы и не обратился к форумчанам.
Есть ещё мысли?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Блин - если вам понятен порядок, то почему бы его здесь не объяснить? Я могу сказать как получить все возможные варианты, но я не пойму в какой последовательности они должны идти.
It's a long way to the top if you wanna rock'n'roll
Fax
Сообщения: 6
Зарегистрирован: 12 апр 2008, 11:33

Возражение принимаю. Объясняю.

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

Всё, нашел способ реализации. Расписывать не буду, времени мало.
Всем спасибо за внимание.
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

Это что то из разряда пузырьковой сортировки получается. Только еще поставить условие можно
[syntax='Delphi']
if a = a[i+1] then a := a[0];
[/syntax]
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
Ответить