<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                用已知字符串s中的字符,生成由其中n個字符組成的所有字符的排列。設n小于字符串s的字符個數,其中s中的字符在每個排列中最多出現一次。 例如,對于s[]=”abc”,n=2,則所有字符的排列有:ba,ca,ab,cb,ac,bc。 算法思想: 使用遞歸完成該實例。 - 舉個例子: - 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”); - 以此方式進行遞歸,完成。 下面是代碼實現部分: ~~~ #include <stdio.h> #include <stdlib.h> #include <string.h> #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() { char s[N]; int n; printf("Please enter the char array:\n"); scanf("%s",&s); printf("Please number:\n"); scanf("%d",&n); perm(n,s); //調用排列函數 return 0; } /** * 舉個例子: * 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){ if(n < 1){ //如果n小于1,表示w中的長度已經達到需要的長度 printf("%s\n",w); return; }else{ char s1[N]; //臨時變量存儲 strcpy(s1,s); int i; for(i = 0;*(s1+i);i++){ //從s1中選擇一個字符放入w對應的位置中 *(w+n-1) = *(s1+i); //將從s1中被選擇的字符替換成第一個字符 *(s1+i) = *s1; //將第一個字符換成被選擇的字符 *s1 = *(w+n-1); perm(n-1,s1+1); } } } ~~~ 下面是程序的運行結果: ![這里寫圖片描述](https://box.kancloud.cn/2016-05-24_5743c075edd44.jpg "") 總體來說,這個算法的思路還是比較簡單的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看