Помощь - Поиск - Пользователи - Календарь
Полная версия: Перестановки цифр числа
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Bard
Всем привет... Мне очень нужна ваша помощь yes2.gif . У меня тут одна задачка никак не могу решить wacko.gif . Во всех поисковиках искал norespect.gif . Пермутацию сделал а эту никак не могу mega_chok.gif
Задача такая:

Задано число(можно и прочесть в виде строки) . Требуеться вывести на экран все числа получившиеся перестановками цифр в этом числе.
Ключевые моменты:
1) если есть одинаковые цифры то вывести перестановку обоих
Например если задано 122 то надо вывести 122 122 223 232 322 322
2) если в заданном числе есть цифра 0 то вывести и ее перестановку
Например если задано число 103 то надо вывести 013 031 103 130 301 310

Помогите мне пожалуйста найти алгоритм и решение этой задачи smile.gif
volvo
Цитата
если задано 122 то надо вывести 122 122 223 232 322 322
wacko.gif
Может, "если задано 122 то надо вывести 122 122 212 212 221 221" ?

Тогда все очень просто: завести массив индексов (в твоем случае - массив <1, 2, 3>), делать перестановки ЕГО элементов, а на печать выводить элементы исходного массива (по переставленным индексам) - тогда программе будет вообще "по барабану", что там у тебя хранится в массиве данных - хоть цифры, хоть буквы...
Bard
Ой извиняюсь за ошибочку...
Цитата
Может, "если задано 122 то надо вывести 122 122 212 212 221 221" ?

Да вы правы volvo.

Я понял алго но проблема у меня в тех ключевых случаях...

Добавлено через 1 мин.
а все теперь я понял.
Цитата
по индексам

Большое спасибо volvo. good.gif
volvo
В FAQ-е лежит программа: Комбинаторика для получения всех перестановок... Изменяешь в ней:

{ Глобальная переменная }
var s: string;
...
procedure output;
var i: integer;
begin
writeln;
for i:=1 to n do write(s[a[i]],' '); { <-- Добавляешь вывод по индексу }
end;

...
begin
write('Введите исходное число: '); readln(s);
n := length(s);
fillchar(a, sizeof(a), 0);
... { Все остальное - без изменений }
end.


Работает на всех перечисленных тобой случаях...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.