一道迅雷筆試題

 

          用C++寫一個函數, 如 Foo(const char *str), 打印出 str 的全排列,
如 abc 的全排列: abc, acb, bca, dac, cab, cba !

 

本人收集解法(聲明不是我做的哈!)

  void chang(char str[],int m) 
                                /*定義循環左移函數(我沒有用左移函數)*/
                                {
                                  int i,j;
                                  char temp=str[0];
                                  for (i=0;i<m;i++) str[i]=str[i+1];
                                  str[i]=temp;
                                }
                                void pai(char str[],int m,int n) /*定義全排列函數*/
                                {
                                int k;
                                void chang(char str[],int m);
                                if (m<n)        /* 定 義 遞 歸 調 用 出 口  */
                                  {
                                   for (k=0;k<=m;k++)
                                    {
                                     pai(str,m+1,n); /*遞歸調用*/
                                     chang(str,m); /*調用左移函數*/
                                    }
                                  }
                                else printf("%s/t",str);
                                }
                                #include "stdio.h"
                                main()
                                {char str[]="ABCD";
                                /*全排列字符,可以任意多個(相應的下面排列函數中參數"4"改成全排列字符的個數)*/
                                clrscr();
                                pai(str,0,4);
                                /*這裏參數0(下標)表示從第一個元素開始,4表示元素個數(不是下標)*/
                                getch();
                                }
                                /*********************************************/

                                下面我來解釋一下,我花了近1天的時間,找到這樣一個規律如下:
                                                           ┏ ABCD
                                                           ┣ BCDA
                                                 ┏ ABCD ━┫
                                                 ┃        ┣ CDAB
                                       ┏ ABCD ━╋ BCAD   ┗ DABC
                                       ┃        ┃         .
                                       ┃        ┗ CABD    .
                                ABCD ━┫                   .               
                                       ┃        ┏ BACD    .
                                       ┃        ┃         .
                                       ┗ BACD ━╋ ACBD   ┏ CBAD
                                                 ┃        ┣ BADC
                                                 ┗ CBAD ━┫
                                                           ┣ ADCB
                                                           ┗ DCBA
                                簡化圖如下所示 ==>
                                                     ┏ ABCD
                                                     ┣ BCDA
                                            ┏ ABC ━┫
                                            ┃       ┣ CDAB
                                    ┏ AB ━╋ BCA   ┗ DABC
                                    ┃      ┃        .
                                    ┃      ┗ CAB    .
                                A ━┫                .               
                                    ┃      ┏ BAC    .
                                    ┃      ┃        .
                                    ┗ BA ━╋ ACB   ┏ CBAD
                                            ┃       ┣ BADC
                                            ┗ CBA ━┫
                                                     ┣ ADCB
                                                     ┗ DCBA

 


發佈了31 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章