![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 24.12.2011
Сообщений: 54
|
![]()
Здравствуйте. Существует ли какая-нибудь функция на c++, которая перебирает все возможные перестановки без повторений элементов? (например для чисел
1 2 3 4 это будет 1 2 1 3 1 4 2 3 2 4 3 4 1 2 3 1 2 4 1 3 4 2 3 4 А если такой функции не существует, то какой алгоритм для такого перебора? |
![]() |
![]() |
![]() |
#2 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
![]()
Функция - не знаю, а алгоритм примерно такой
Сначала берешь первое сочетание нужной длины. Потом идешь справа-налево и ищешь элемент, который можно увеличить на 1 (а его можно увеличить, если удастся сделать следующее действие). Когда нашел - увеличиваешь, а справа оставшиеся заполняешь минимально возможными по возрастанию. Пример: Сочетания длины 3 из 5 элементов: 123 - пытаемся увеличить самый правый, он < 5, все ок 124 - то же самое 125 - самый правый не увеличить, второй можно увеличить и заполнить оставшиеся: 134 - самый правый 135 - второй 145 - второй нельзя, т.к. получится 156, поэтому левый 234 - правый 235 - второй 245 - если второй, то 256, поэтому левый 345
Форматируйте код, будьте людьми.
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 24.12.2011
Сообщений: 54
|
![]()
Спасибо, но суть в том что перебираться будут не только числа, но и буквы, то есть нельзя сделать +1 и сравнить. И одной длины сочетаний тоже нет, так как надо перебрать все возможные длины. Изначально известно только число перебираемых элементов. Может занести все эти элементы в массив и попробовать через индексы массива их как-то перебрать?
|
![]() |
![]() |
![]() |
#4 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
![]()
Ну с длинами все понятно - просто будете делать для всех длин от 1 до N.
А буквы можно делать +1 и даже сравнивать, они же в кодировке по порядку идут, а в с++ они неотличимы от чисел.
Форматируйте код, будьте людьми.
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программа перебора вариантов (изменить перебор цифровой на перебор буквенный) | BArt2000 | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 02.03.2015 12:56 |
Даны два слова. Получить третье слово из неповторяющихся символов, входящих как в первое, так и во второе слова. | dlinkz | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 01.02.2012 11:09 |
формула суммы сочетаний | HyperSonik | Microsoft Office Excel | 4 | 29.01.2012 02:36 |
Найти количество сочетаний из n по k и вывести все комбинации этих сочетаний на экран | Рон99 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 14.12.2011 00:05 |
Восстановление сочетаний клавиш... | Busine2009 | Microsoft Office Word | 0 | 28.06.2009 20:17 |