根据用户给定的长度生成给定字符(A、B、C)的所有可能的置换,以生成C中的字符串
我必须根据用户给定的长度,使用给定的字符a B C生成一个字符串。假设用户给出4作为长度,则代码应显示如下:根据用户给定的长度生成给定字符(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。
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)。