如何计算置换的总可能性?(在C中)



我是编程新手,我正在尝试用C来补充这段代码,以排列字符串,目前它显示了交换的所有单词,并计算单词的字符数。

但我希望它也能计算排列产生的行数,在这一部分,代码不起作用。我不知道还能做什么!

示例:单词";嗨";,生成两行:hi和ih。(在这种情况下,我希望程序写入"生成的字:2"(

代码:

#include <string.h>
#include <stdio.h>
void swap (char *x, char *y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}
void permute(char *a, int i, int n)
{
int j;
if (i == n)
printf("%sn", a);
else
{
for (j = i; j <= n; j++)
{
swap((a + i), (a + j));
permute(a, i + 1, n);
swap((a + i), (a + j)); //backtrack
}
}
}
int main()
{
char str[21];
int len;
int cont = 1;
int fatorial = 1;
printf("nType a word: ");
scanf("%s", str);
len = strlen(str);
permute(str, 0, len - 1);
printf("nNumber of letters: %dn", len);
while (cont < len)
{
fatorial = fatorial * cont;
cont++;
}
printf("nPossibilities:%d", fatorial);
return 0;
}

您可以在permute中递增计数器。类似于:

#include <string.h>
#include <stdio.h>
void
swap(char *x, char *y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}
void
permute(char *a, int i, int n, int *count)
{
int j;
if( i == n ){
printf("%sn", a);
*count += 1;
} else {
for( j = i; j <= n; j += 1 ){
swap(a + i, a + j);
permute(a, i + 1, n, count);
swap((a + i), (a + j));
}
}
}
int
main(int argc, char **argv)
{
char buf[1024];
char *str = argc > 1 ? argv[1] : buf;
int len;
int contador = 0;
if( argc < 2 ){
printf("nType a word: ");
scanf("%1023s", buf);
}
len = strlen(str);
permute(str, 0, len - 1, &contador);
printf("nNumber of words: %dn", contador);
return 0;
}

最新更新