Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Перестановки цифр числа

Автор: Bard 8.12.2007 16:26

Всем привет... Мне очень нужна ваша помощь 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 8.12.2007 16:53

Цитата
если задано 122 то надо вывести 122 122 223 232 322 322
wacko.gif
Может, "если задано 122 то надо вывести 122 122 212 212 221 221" ?

Тогда все очень просто: завести массив индексов (в твоем случае - массив <1, 2, 3>), делать перестановки ЕГО элементов, а на печать выводить элементы исходного массива (по переставленным индексам) - тогда программе будет вообще "по барабану", что там у тебя хранится в массиве данных - хоть цифры, хоть буквы...

Автор: Bard 8.12.2007 17:02

Ой извиняюсь за ошибочку...

Цитата
Может, "если задано 122 то надо вывести 122 122 212 212 221 221" ?

Да вы правы volvo.

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

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

Большое спасибо volvo. good.gif

Автор: volvo 8.12.2007 17:10

В FAQ-е лежит программа: http://forum.pascal.net.ru/index.php?s=&showtopic=3777&view=findpost&p=52823 для получения всех перестановок... Изменяешь в ней:

{ Глобальная переменная }
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.


Работает на всех перечисленных тобой случаях...