Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2012, 14:52   #1
slavik1993
 
Регистрация: 26.10.2012
Сообщений: 3
По умолчанию перестановка цифр числа

дано число или массив цифр (не важно) 1,2,3,...,n-1,n;
нужно перебрать все варианти перестановок етих цифр, чтоб в конце алгоритма получилось n,n-1,...3,2,1
в каждом варианте каждая цифра используется, конечно-же, один раз.
slavik1993 вне форума Ответить с цитированием
Старый 26.10.2012, 15:02   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

такой код подойдёт?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.10.2012, 18:26   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Посоревнуюсь с Serge_Bliznykov в реюзе кода )))
http://programmersforum.ru/showthread.php?t=138096

ПС. правда, всегда путал перестановки и сочетания, не обессудьте, коли и на этот раз спутал...

Последний раз редактировалось phomm; 26.10.2012 в 18:48.
phomm вне форума Ответить с цитированием
Старый 26.10.2012, 23:33   #4
slavik1993
 
Регистрация: 26.10.2012
Сообщений: 3
Вопрос

алгоритм должен делать так:
1234
1243
1324
1342
1423
1432

2134
2143
2314
2341
2413
2431

3124
3142
3214
3241
3412
3421

4123
4132
4213
4231
4312
4321

тоесть по-очериди как-бы записывает число больше предедущего, и так до максимального.
но у меня код получается слишком длинный и неправильний))кеп)
подскажите какакойто оптимальний вариант? спс.
slavik1993 вне форума Ответить с цитированием
Старый 26.10.2012, 23:47   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Сообщение от slavik1993 Посмотреть сообщение
тоесть по-очериди как-бы записывает число больше предедущего, и так до максимального.
но у меня код получается слишком длинный и неправильний))кеп)
подскажите какакойто оптимальний вариант? спс.
Смотрите: пусть у нас есть какое-то число (2341). Нам нужно его увеличить. Причём увеличить как можно меньше - т.е. сохранив как можно больше старших разрядов и как можно меньше увеличив старший изменённый.
1) Возьмём последнюю цифру (1).
2) Пойдём от конца числа и будем идти, пока очередная цифра не станет меньше предыдущей; запомним её (3).
3) Пойдём обратно, пока не найдём самую маленькую цифру, ещё превышающую запомненную (4); если так доходим до конца числа, искомая - последняя цифра.
4) Поменяем их местами (2431).
5) Упорядочим все цифры в разрядах младше достигнутого в пункте 2 по возрастанию (2413).
Всё, мы перешли к следующему числу.
Abstraction вне форума Ответить с цитированием
Старый 27.10.2012, 00:43   #6
slavik1993
 
Регистрация: 26.10.2012
Сообщений: 3
По умолчанию

большое спасибо.
slavik1993 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти все слова-числа, т.е. такие, которые состоят только из цифр. Известно, что количество цифр в каждом числе не более 9 (девяти vikichocolate Помощь студентам 1 21.12.2011 00:12
Перестановка цифр в числе lisenog Помощь студентам 7 22.10.2010 01:33
Перестановка цифр Sanek_ntsk Общие вопросы Delphi 1 11.01.2010 00:53
Перестановка цифр в целом числе. Паскаль. Cheetah Помощь студентам 5 16.10.2008 21:07