生成所有列表(置换)

时间:2013-02-27 23:28:40

标签: c

当我输入6个或更多数字/字符时,我不确定为什么我的代码会这样做,它只显示一些输出。 (我知道数字/字符不会影响任何事情。)

例如,如果我输入cat,它会列出所有可能的变化: 猫 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;
    }

2 个答案:

答案 0 :(得分:1)

问题不在于您的代码,问题是Windows cmd.exe没有足够的缓冲区来显示所有排列。

我尝试使用cygwin,它完美无缺。

以下是证明它的屏幕截图:

with cmd.exe

enter image description here

与cygwin

enter image description here

答案 1 :(得分:0)

Aniket是对的。

以下是该做什么:

您可以使用左上角菜单的设置增加cmd.exe的存储空间。将缓冲区高度设置为9999。