我已經用C編寫了一個基本排列程序。 用戶輸入一個數字,並打印出該數字的所有排列組合。還生成非唯一(重複)排列
基本上,這是它是如何工作(主算法是用於find the next higher permutation的一個):
int currentPerm = toAscending(num);
int lastPerm = toDescending(num);
int counter = 1;
printf("%d", currentPerm);
while (currentPerm != lastPerm)
{
counter++;
currentPerm = nextHigherPerm(currentPerm);
printf("%d", currentPerm);
}
然而,當輸入的號碼包括重複的數字 - 重複 - 不被產生一些置換,因爲他們是重複的。計數器顯示的數字與它應該顯示的數字不同 - 它不是顯示數字中的數字位數的階乘,而是顯示一個較小的數字,只有唯一的排列。
例如:
num = 1234567
counter = 5040 (!7 - all unique)
num = 1123456
counter = 2520
num = 1112345
counter = 840
我想它來治療重複/重複的數字,好像他們是不同的 - 我不想只產生獨特排列 - 而是產生所有的排列,無論它們是重複的還是重複的。
如果你問如何改變生成排列的代碼,你不認爲這是明智的顯示生成代碼嗎?現在你只顯示一個函數調用:'nextHigherPerm(currentPerm)'。 – Caleb
@Caleb我沒有包括它,因爲它很長。我想我可以在'findHigherPerm'算法中找到一些我應該改變/注意的方向,所以我不會忽略不唯一的排列。 – amiregelz