我必须使用给定字符A B C为用户给出的长度生成一个字符串。假设如果用户给出4作为长度,则代码应显示为:
AAAA
AAAB
AAAC
AABA
.
.
.
CCCC.
我可以生成字符串ABC的排列。但我的问题是,如果用户输入4或5或6 比如何生成4或5或6个字符的排列,只包含A,B,C.please帮助。 你可以请我提供代码或步骤如何编码。
非常感谢任何提示,想法或建议。
答案 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);
}
}
}