Я хочу программу, которая принимает 8-значное число и возвращает все его перестановки.Перестановки целых чисел (без дублирования)
Например, 12345678
должен вернуть 12345687, 12345768, 12345786 .. 87654321
.
Моя идея заключается в том, чтобы сделать это:
Сначала вставьте каждую цифру в качестве элемента в массиве, а затем:
for (int y = 0; y < digits; y++)
for (int x = 0; x < digits; x++)
for (int u = 0; u < digits; u++)
for (int m = 0; m < digits; m++)
for (int z = 0; z < digits; z++)
for (int b = 0; b < digits; b++)
for (int c = 0; c < digits; c++)
for (int d = 0; d < digits; d++)
{
if (!(y == x || y == u || y == m
|| y == z || y == b || y == c
|| y == d || x == u || x == m
|| x == z || x == b || x == c
|| x == d || u == m || u == z
|| u == b || u == c || u == d
|| m == z || m == b || m == c
|| m == d || z == b || z == c
|| z == d || b == c || b == d || c == d))
{
holding[co] = (a1[y] * 10000000)
+ (a1[x] * 1000000)
+ (a1[u] * 100000)
+ (a1[m] * 10000)
+ (a1[z] * 1000)
+ (a1[b] * 100)
+ (a1[c] * 10)
+ a1[d];
co++;
}
}
И получить все результат в массив. Сортируйте массив и избавьтесь от тех же элементов (например, если ввод 11223344
, тогда будут те же элементы).
Но проблема в том, что я действительно хочу напечатать все перестановки чисел от 10000000
до 20000000
. Эта идея работает слишком медленно. Кто-нибудь знает, как сделать это быстрее?
«Все перестановки чисел от 10000000 до 2000000» - погибает мысль, вся бумага в мире не приведет к результату. – laune
Или вы имеете в виду те числа, которые являются результатом перестановок цифр с 1 по 8, где первая цифра равна 1? – laune
для хранения всех перестановок от 1 миллиона до 2 миллионов является факториалом в 1 миллион, слишком большим для любой коллекции на любом языке программирования, даже если вывести их в файл, это займет гигабайт. что именно вы хотите сделать с перестановками? –