问题很简单。从给定的一组数字(最多 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;
}