生成给定字符(A,B,C)的所有可能排列,用于由用户给出的长度以在C中制作字符串

时间:2013-02-27 12:52:16

标签: c permutation

我必须使用给定字符A B C为用户给出的长度生成一个字符串。假设如果用户给出4作为长度,则代码应显示为:

AAAA  
AAAB  
AAAC  
AABA    
.  
.  
.  
CCCC.   

我可以生成字符串ABC的排列。但我的问题是,如果用户输入4或5或6 比如何生成4或5或6个字符的排列,只包含A,B,C.please帮助。 你可以请我提供代码或步骤如何编码。

非常感谢任何提示,想法或建议。

3 个答案:

答案 0 :(得分:1)

将排列表示为数字系统基数中的数字4.将A映射到0,B映射到1 C到2和D到3.迭代1到4之间的所有数字 4 (256) ,表示基数为4的每个数字,并用字母替换数字。

答案 1 :(得分:0)

你可以尝试递归这种类型的东西...这适用于有一次出现任何字符的字符串...所以稍微做一点,你不必交换那些相同的元素..假设您不必将'A'与'A'或'B'与'B'交换。

void permute(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));
             permute(a, i+1, n);
             swap((a+i), (a+j)); //backtrack
         }
    }
} 

答案 2 :(得分:0)

这是一个已知的递归问题。

void f (char *dst, const char *src, int depth, int current) {
  int i;

  if (current >= depth) {
    dst[depth] = '\0';
    puts(dst);
  } else {
    for (i = 0; src[i] != '\0'; i++) {
      dst[current] = src[i];
      f (dst, src, depth, current + 1);
    }
  }
}