C實現字元排列

2021-09-02 11:24:45 字數 1194 閱讀 6544

用已知字串s中的字元,生成由其中n個字元組成的所有字元的排列。設n小於字串s的字元個數,其中s中的字元在每個排列中最多出現一次。 例如,對於s=」abc」,n=2,則所有字元的排列有:ba,ca,ab,cb,ac,bc。

演算法思想:

使用遞迴完成該例項。

下面是**實現部分:

#include #include #include #define n 20

char w[n];

void perm(int n,char *s);

/** * 用已知字串s中的字元,生成由其中n個字元組成的所有字元的排列。

* 設n小於字串s的字元個數,其中s中的字元在每個排列中最多出現一次。

* 例如,對於s="abc",n=2,則所有字元的排列有:ba,ca,ab,cb,ac,bc。

*/int main()

/** * 舉個例子:

* s = "abc",n=2

* 則第乙個perm(n,s),即perm(2,"abc");

* 首先需要判斷w中的字元個數是否滿足,n=2>1,表示還沒有滿足

* 首先,從s的第乙個元素開始,s[1] = 'a';

* 填充到w中,w[n-1]即,w[1] = 'a';

* 緊接著,進行一些調整,使得s1 = bc,n=1

* 進行同樣的perm,即perm(1,"bc");同樣先進行判斷

* 選擇b填充到w中,在進入perm(0,"c"),判斷輸出

* 接著,回到上一層,perm(1,"bc"),再選擇字元"c"進入w

* 選擇c進入w之後,進行一些調整,將s1調整成這樣乙個字串s1="cb",

* 這樣進入perm(0,"b"),判斷輸出.

* * 接著,進入第一層,由於ba,ca都已經輸出完畢,第乙個元素從b開始進行選擇

* 首先將b放入w中,即w[1] = 'b';接著進行一些調整,將s1調整為s1 = "bac";

* 進入perm(1,"ac");

* 以此方式進行遞迴,完成。

*/void perm(int n,char *s)else}}

下面是程式的執行結果:

總體來說,這個演算法的思路還是比較簡單的。

字串的排列 C 實現

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則按字典序列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。牛客網題目鏈結 需要兩步即可解決問題 using ...

C 實現全排列

總時間限制 1000ms 記憶體限制 65536kb 描述給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。我們假設對於小寫字母有 a b y z 而且給定的字串中的字母已經按照從小到大的順序排列。輸入輸入只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。輸出輸出這...

C 實現全排列

給定乙個陣列,求這個陣列的全排列。列如 a 對陣列a求全排列 結題思路 將a陣列中的元素依次放在第乙個位置然,對剩下的元素進行全排列。剩下元素全排列依然是,將剩下的元素依次放在第乙個位置,對剩下的元素進行全排列。直到剩下的元素個數為乙個時,排列結束。這裡我給出固定元素1,對元素2 3 4進行全排列的...