根据用户给定的长度生成给定字符(A、B、C)的所有可能的置换,以生成C中的字符串

根据用户给定的长度生成给定字符(A、B、C)的所有可能的置换,以生成C中的字符串,c,permutation,C,Permutation,我必须根据用户给定的长度,使用给定的字符a B C生成一个字符串。假设用户给出4作为长度,则代码应显示如下: AAAA AAAB AAAC AABA . . . CCCC. 我可以生成字符串ABC的排列。但我的问题是,如果用户输入4或5或6 比我如何能产生排列4或5或6个字符,其中只包含A,B,C。请帮助。 你能提供我代码或步骤如何代码 任何提示、想法或建议都将不胜感激。将排列表示为数字系统基数4中的数字。将A映射到0,B映射到1,C映射到2,D映射到3。

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

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


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

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

您可以尝试这种类型的递归。。。这适用于任何字符只出现一次的字符串。。。所以稍微做一点就可以了,你不必交换那些相同的元素。。假设您不必将“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
         }
    }
} 
void排列(字符*a,整数i,整数n)
{
int j;
如果(i==n)
printf(“%s\n”,a);
其他的
{

对于(j=i;j,这是一个已知的递归问题

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);
    }
  }
}

你试过什么?你是从你的作业中逐字抄写的吗?因为我不理解它(如果你是逐字抄写的,很抱歉,但写问题的人是个糟糕的作者)欢迎来到SO,别忘了查看。如果你付出了一些努力,发布了一些你尝试过的代码,并清楚地说明了你的问题,人们会很乐意帮助你的!这是昨天回答的。请投重复票?(我还没有足够的代表)抱歉…写得不好。我的问题是:我必须使用3个字符(如a、B、C)按user.void main(){int number;printf(“您可以按任意数字吗”);scanf(“%d”,&number);printf(“entred number is=%d\n”,number);组合(number);您能否提供如何为soln编码forThanks的代码或步骤,但您的代码中几乎没有修改。它应该是if(current>=depth),而不是if(current>depth)。