2013-02-27 140 views
2

我很不確定爲什麼我的代碼這樣做時,我鍵入6或更多數字/字符,它只顯示一些輸出。 (我知道數字/字符不影響任何東西)。生成所有列表(排列)

例如,如果我輸入的貓,它會列出所有可能的變化: 貓 CTA 行爲 ATC TAC TCA

但是,當我在123456型(或任何6+字母串): 它開始顯示在462513-612345(如果你知道我的意思)。剩下的事情發生了什麼(123456-462513)?

#include <stdio.h> 
    #include <string.h> 

    void swap (char *X, char *Y) 
    { 
     char Z; 
     Z = *X; 
     *X = *Y; 
     *Y = Z; 
    } 

    void mixmatch (char *A, int i, int n) 
    { 
     int j; 
     if (i == n) 
     printf("%s\n", A); 
     else 
     { 
     for (j = i; j <= n; j++) 
     { 
      swap((A+i), (A+j)); 
      mixmatch(A, i+1, n); 
      swap((A+i), (A+j)); 
     } 
     } 
    } 

    int main() 
    { 
     char A[100]; 
     printf ("Enter the string/set of numbers: "); 
     gets(A); 

     int k; 
     k=strlen(A); 
     mixmatch(A, 0, k-1); 

    return 0; 
    } 
+0

您是否嘗試每次調用「mixmatch」時都嘗試打印* A,i和n的值?也許這會給你提供線索...... – Floris 2013-02-27 23:32:16

+0

我沒有看到任何錯誤,它在我的系統上工作 - 打印所有排列123456 – 2013-02-27 23:35:59

+0

感謝您的幫助Aniket! – user2093028 2013-02-27 23:47:31

回答

1

問題不在於你的代碼,問題是cmd.exe沒有足夠的緩衝區向你展示所有的排列的窗口。

我試過用cygwin,它的工作完美無瑕。

下面是截圖來證明這一點:

用cmd.exe的

enter image description here

使用Cygwin

enter image description here

0

Aniket是正確的。

這裏是做什麼:

可以使用左上角菜單的設置,增加的cmd.exe的存儲。設置緩衝區高度爲9999.

+0

哦,謝謝!我認爲我的代碼有問題! – user2093028 2013-02-27 23:46:18

+0

嗯,當我去了我的設置,沒有這樣的事情,緩衝高度。在「窗口」選項卡下,有外觀,行爲,翻譯,選擇和顏色的子選項卡。我看了他們所有人,沒有看到緩衝高度的方面。該怎麼辦? – user2093028 2013-02-27 23:55:55

+0

我只有WinXP。這裏該選項卡被稱爲「佈局」。如果這不存在於你的Windows中,那麼你可以嘗試cygwin。 – 2013-02-27 23:57:41