-2

我必须使用给定字符 ABC 为用户给出的长度生成一个字符串。假设如果用户给出 4 作为长度,那么代码应该显示如下:

AAAA  
AAAB  
AAAC  
AABA    
.  
.  
.  
CCCC.   

我可以生成字符串 ABC 的排列。但我的问题是,如果用户输入 4、5 或 6,而不是我如何生成仅包含 A、B、C 的 4、5 或 6 个字符的排列,请帮忙。能否请您提供代码或如何编码的步骤。

任何提示、想法或建议将不胜感激。

4

3 回答 3

1

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

于 2013-02-27T12:55:26.527 回答
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
         }
    }
} 
于 2013-02-27T13:00:10.007 回答
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);
    }
  }
}
于 2013-02-27T13:04:04.870 回答