問題很簡單。從給定的一組數字(最多有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) –