1樓:夢若素水
用遞迴的演算法,有點像漢諾塔的遞迴程式,就是先控制乙個不動,讓剩餘的排列好,然後再移動第乙個,再排列好剩餘的。
這個程式也是這個意思。
舉個例子說 1234
1。先保持1不動,排列234
2。保持2不動,排列34
3。保持3不動,排列4
4。得到4;輸出1234。
5。然後跳轉到3,將3與4互換,6。得到3;輸出1243。
7。跳轉到2,將2與3互換,8。重複3-6,得1324,1342。
9。跳轉到2,將2與4互換,得到1423,1432。
以下省略若干步。。
最後就得到全排列。
程式:#include
void permutation(char a,int m, int n)
int i;
char t;
if (mpermutation(a, m+1, n);
for(i=m+1;it=a[m]; a[m]=a[i]; a[i]=t;
permutation(a, m+1, n);
t=a[m]; a[m]=a[i]; a[i]=t;
elseprintf("%s", a);
int main()
char a=abcde";
permutation(a,0,5);
return 0;
2樓:網友
n階全排列是經典問題,可以用二重迴圈的迭代或遞迴實現。
有個相對簡單的演算法,把所有排列理解成乙個乙個n進位數串,比如2階全排列理解成2進位數,從十進位0開始遍歷,求出他的二進位數串,所有的遍歷組成乙個2階排列。
n階全排列。
max = 全排列總可能遍歷數,比如m位n進位數,即為n的m次方。
int a[m], i, j, t;
for (i = 0; i < max; i++)/將10進位數i轉為n進位數,輸出。
t = i;
j = 0;
memset(a, 0, m); a初始化為0while(t !=0)
a[j] =t % n;
t = t / n;
a[j]中存放的即為n階全排列。
for ( j = m-1; j > 0; j--)printf("%d", a[j] +1);
printf(" 下乙個可能排列");
關於n階排列(求高手相助)
3樓:網友
假設奇排列數為s,偶排列數為t
交換奇排列中任意兩個數,得到乙個偶排列,故s<=t
交換偶排列中任意兩個數,得到乙個奇排列,故t<=s
從而s=t
4樓:網友
任何乙個奇排列,交換前兩個元素,得到乙個偶排列。反之亦然。
這樣我們得到乙個所有奇排列和所有偶排列之間的雙射。
如何用C 實現單字切分
請把問題說得清楚點!如果僅僅是將詞切分為字,很簡單的!在。net中,漢字和英文本元 符號都用的是unicode表示,漢字與英文本元一樣,也是乙個char。漢字字元 範圍為 u4e00 u9fa5 注 標點不在此範圍 既然如此,就可以用從字串中切分字元的方法切分詞語。string chsword 周全...
如何用altiumdesigner實現原理圖到pcb板的轉換
建立工程,加入原理圖和pcb,儲存工程,儲存完以後,點設計 updata 就是設計選單下的第一項,就轉到pcb了 就是把原理圖和pcb檔案放在乙個工程裡面,畫好原理圖以後點設計選單裡面的到第一項就把原理圖轉成pcb,然後就可以自動布局和自動佈線了,這樣就是最詳細的了,要是還要說明到怎麼移動器件的話,...
如何用jspjs實現這個網頁面,如何用JSP JS實現這個網頁面
這個應該算比較簡單的,只是有點繁瑣。因為查詢條件比較多,可以將查詢條件做成乙個只有getter和setter方法的polo類。使用者提交表單的時候新建個類來儲存這些條件資訊。然後再根據相應資訊到資料庫中尋找匹配資訊。然後呢,根據表結構設計使用者類,所有查詢出來的使用者資訊,乙個使用者乙個物件,返回給...