| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [Pascal ABC]Перестановка цифр числа |
| Автор: petri 1.4.2012, 08:03 |
| Есть целое число заранее ограниченной длины. Как перебрать все перестановки цифр числа без использования массива и строк? |
| Автор: Mirkes 1.4.2012, 11:50 |
| Уточните задание. Пока звучит как минимум странно. Если под числом понимается переменная числового типа, то у нее в принципе нет цифр, а если имеется в виду текстовое представление числа, то необходимо его куда-то прочитать. Если имеется в виду именно вторая задача о текстовом представлении числа, то вместо массивов можно использовать списки или стеки. |
| Автор: Mirkes 1.4.2012, 13:10 | ||||
Абсолютно неверная постановка вопроса. Прошу прощения за резкость, но это принципиальная разница. Числа это не цифры. Число три и цифра 3 имеют между собой мало общего. Посему числовая переменная НЕ ИМЕЕТ цифр. Цифры могут быть только в записи числа. Запись бывает разная и делением на 10 получается только один вид записи из многих. |
| Автор: petri 1.4.2012, 17:06 | ||
Переменная типа integer. Из нее с помощью div и mod выделить цифры. |
| Автор: Mirkes 1.4.2012, 19:32 |
В этой ситуации записывайте цифры в список. Далее со списком порождайте подстановки. Техника та же, что и при работе с массивами, только вставка и удаление элемента делаются чуть иначе. По какой теме задача? Какую технику следует продемонстрировать? Есть несколько алгоритмов перечисления всех перестановок. Берете любой из них и адаптируете для работы со списком вместо массива. |
| Автор: petri 2.4.2012, 03:03 |
| Я занимаюсь по задачнику, в котором эта задача относится к теме "Процедуры и функции, рекурсия. Подключение стандартных модулей.", и эта тема идет до тем Строки, Массивы и тем более динамические структуры. Поэтому я подумал, что задачу можно как-то решить, используя только циклы, процедуры и функции. P.S. Что я думаю по задаче : чтобы перебрать все перестановки, надо каким-то образом упорядочить цифры числа, но упорядоченные типы идут по теме позже. Или автор не логичен, или таки есть какой-то алгоритм. |
| Автор: Mirkes 2.4.2012, 17:17 |
| Я в ступоре Вообще говоря, для генерации перестановок нужна возможность обратиться к элементам, которые переставляются. Как то раз я решал задачу сортировки 50 значений в языке не имеющем массивов. Это возможно, но точно антипедагогично. Поскольку вы утверждаете что у вас тип Integer, а в паскале он 32 битный, то цифр не более 10. Можно пустить 10 циклов и проверяя что получена перестановка печатать значения, получая цифры числа по номеру. Но в этом подходе существует вероятность двух одинаковых цифр в числе. Кроме того число может быть меньше 10. Кстати, множествами пользоваться можно? Вообще то это напоминает извращение, но если можно пользоваться множествами и пренебречь совпадением цифр, то с помощью рекурсии эаписать можно. |