После использования Google для поиска примеров я нашел следующий пример , который работает для генерации перестановок:
namespace ConsoleApp1
{
class Program
{
public static void Main()
{
int n, i;
formPermut test = new formPermut();
int[] arr1 = new int[5];
Console.WriteLine("\n\n Recursion : Generate all possible permutations of an array :");
Console.WriteLine("------------------------------------------------------------------");
Console.Write(" Input the number of elements to store in the array [maximum 5 digits ] :");
n = Convert.ToInt32(Console.ReadLine());
Console.Write(" Input {0} number of elements in the array :\n", n);
for (i = 0; i < n; i++)
{
Console.Write(" element - {0} : ", i);
arr1[i] = Convert.ToInt32(Console.ReadLine());
}
Console.Write("\n The Permutations with a combination of {0} digits are : \n", n);
test.prnPermut(arr1, 0, n - 1);
Console.Write("\n\n");
Console.ReadKey();
}
class formPermut
{
public void swapTwoNumber(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
public void prnPermut(int[] list, int k, int m)
{
int i;
if (k == m)
{
for (i = 0; i <= m; i++)
Console.Write("{0}", list[i]);
Console.Write(" ");
}
else
for (i = k; i <= m; i++)
{
swapTwoNumber(ref list[k], ref list[i]);
prnPermut(list, k + 1, m);
swapTwoNumber(ref list[k], ref list[i]);
}
}
}
}
}
Итак, если у меня есть 2 входных значения 1
и 2
, приведенный выше код вернет следующие результаты 12
и 21
.
Мне нужно, чтобы он возвращал больше результатов, чем, например:
1
12
2
21
Если я введу 3 значения 1
и 2
и 3
, в настоящий момент возвращается:
123 132 213 231 321 312
Но мне нужно, чтобы он возвращал все двузначные и однозначные перестановки одновременно.
Кто-нибудь знает, как я могу это сделать?
Например:
1 2 3 12 13 21 23 31 32 123 132 213 321 312
и так далее, возможно, я пропустил некоторые комбинации / перестановки.
Моя конечная цель - сделать то же самое, но со строками, поэтому, если входное значение равно one
и two
, выходное значение будет:
one
onetwo
two
twoone
для трех входов, таких как:
one
и two
и three
вывод будет:
one two three onetwo onethree twoone twothree threeone threetwo onetwothree onethreetwo twoonethree threetwoone threeonetwo
при условии, что я не пропустил ни одной комбинации.