Я хочу написать программу, которая дает 2 строки (тип char) и объединить их по-разному. например, если 2 строки являются «abc» и «mn», программа должна печатать: abcmn abmnc amnbc mnabc mabcn mannbc mabnc ambnc ambcn abmcn. Как вы видите, они должны быть в упорядоченной форме в каждой строке. Я имею в виду, что, например, «c» не может быть раньше, чем «a» или «n» не может быть до «m». что я могу сделать?Перестановка 2 строк в C++
ответ
Как я не знаю много о c++
, я не могу написать полный код этой проблемы, но я опишу идею и алгоритм, как показано ниже.
Поскольку мы должны сохранить порядок символов в каждой строке, мы можем думать, процесс построения комбинаций, как это (используя пример abc
и mn
):
давайте рассмотрим последний элемент сначала в каждой возможной комбинации: это либо
c
, либоn
. Таким образом, мы можем создать список с двумя элементами: список:[['c'];['n']]
.Тогда давайте посмотрим на второй последний элемент:
Если
c
является последним элементом, то возможные вторые последние элементы являютсяb
иn
, верно?Если
n
последний элемент, то возможные вторые последние элементы являютсяc
иm
, верно?Так давайте расширим предыдущего списка
[['b';'c'];['n';'c'];['c';'n'];['m';'n']]
Если продолжать третий последний элемент таким же образом, мы будем иметь
[['a';'b';'c'];['n';'b';'c'];['b';'n';'c'];['m';'n';'c'];['b';'c';'n'];['m';'c';'n'];['c';'m';'n']]
Продолжить вверх вы получите полный список.
Вот код OCaml только в случае, если вы знаете, функциональное программирование
let rec comb_2 l1 l2 =
let insert x = List.map (fun y -> x::y) in
match l1, l2 with
| [], [] -> [[]]
| hd::tl, [] | [], hd::tl -> comb_2 tl [] |> insert hd
| hd1::tl1, hd2::tl2 ->
(comb_2 tl1 l2 |> insert hd1) @ (comb_2 l1 tl2 |> insert hd2)
Спасибо за помощь ... это была хорошая помощь. – user3202024
@ user3202024 Если вы считаете, что это полезно, не могли бы вы пометить ответ как правильный?> –
- 1. Перестановка 2 строк в матрице C++
- 2. Перестановка массива строк в C++
- 3. Перестановка двух строк в C++
- 4. Перестановка строк в R
- 5. Перестановка строк между узлами в C
- 6. Перестановка строк через рекурсию в C++
- 7. Перестановка алгоритма списка строк
- 8. Перестановка отдельных строк матрицы
- 9. перестановка строк столбцов в Teradata
- 10. k перестановка в C++
- 11. Перестановка в C#
- 12. Перестановка строк с рекурсией
- 13. Перестановка строк для петель
- 14. Перестановка строк в строковом массиве
- 15. Перестановка двух строк в матрице
- 16. Перестановка двух строк в ArrayAdapter
- 17. Перестановка указатель в C
- 18. Перестановка строк в C: Что я делаю неправильно?
- 19. Рекурсивная перестановка C++
- 20. C# Перестановка массива arraylists?
- 21. Перестановка столбцов только несколько строк в Баш
- 22. перестановка строк в методе Гаусса Jordan
- 23. Бит-перестановка/манипуляция в C
- 24. Перестановка строк в таблице с помощью запроса
- 25. Почему перестановка строк в программе происходит дважды?
- 26. Перестановка для чисел в C
- 27. MATLAB Перестановка (переставить) массив строк
- 28. Перестановка строк порядка матрицы в г
- 29. Перестановка x длиной 2 символа
- 30. Перестановка и комбинация в C#
что, если "а" и "CD"? может ли один из «c» быть перед «a»? –
потому что они такие же проблем нет. – user3202024
так что «acdbcd» в порядке? –