Проблема простая. Из заданного набора цифр (максимум 10 цифр) вычислите все числа, которые могут быть образованы из этих цифр (цифру можно использовать столько раз, сколько она входит в набор).
Во-первых, я думаю об использовании грубой силы и перебора всех возможных комбинаций, но количество комбинаций равно факториалу N, где N - количество цифр. И даже если это возможно, как я могу запустить все возможные комбинации без использования 10 циклов for?
Во-вторых, я попытался поместить все эти цифры в строку и стереть одну из строки, положить конец и продолжать пытаться вот так, но это, вероятно, не даст никаких возможных комбинаций, и даже если это так, я не верю буду в разумные сроки.
Я уверен, что должен быть более быстрый и лучший алгоритм для получения всех возможных чисел из заданного набора цифр.
Я нашел один код в Интернете, и он:
#include <iostream>
#include <algorithm>
using namespace std;
int main () {
int noOfDigits;
cin >> noOfDigits;
int myints[noOfDigits];
for(int i = 0; i<noOfDigits; i++)
{
cin >> myints[i];
}
sort (myints,myints+3);
do {
for(int i = 0; i<noOfDigits;i++)
{
cout << myints[i];
}
cout << endl;
} while ( next_permutation(myints,myints+noOfDigits) );
return 0;
}