【发布时间】:2013-03-21 23:16:33
【问题描述】:
问题很简单。从给定的一组数字(最多 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 吗?我的意思是允许多次选择同一个数字吗?
-
@SongWang 我猜它是否包含在您的案例中 twise {1,1,2,2}。
-
@Stefan4024 您需要多种组合吗?或者实际上是组合?
-
不,对于 {1,2},您应该打印或放入向量中只有 12 和 21。我想我已经在问题中说明了这一点
标签: c++ algorithm permutation digits