问题很简单。从给定的一组数字(最多有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;
}
你可以把同一位数放在不同的位置吗?例如,给定{1,2},你可以做11,12,22,21吗?我的意思是同一个数字可以被选择多次? – taocp
@SongWang我想如果它包含twise {1,1,2,2}在你的情况。 – mlt
[C++算法for N!排序(http://stackoverflow.com/questions/2141929/c-algorithm-for-n-orderings) –