我真的不知道如何解释它,所以我会解释我的代码:
#include <stdio.h>
// factorial source : http://www.programmingsimplified.com/c-program-find-factorial
int factorial(int n)
{
int c, fact = 1;
for (c = 1; c <= n; c++)
fact = fact * c;
return fact;
}
int main() {
int i,j,switch_flag;
int digit_length = 3;
int probability = factorial(digit_length);
unsigned char *digit = malloc(digit_length);
for (i=0 ; i<digit_length ; i++)
digit[i] = i;
// Print Digit
for (i=0 ; i<digit_length ; i++)
printf("[%d]",digit[i]);
printf("\n");
for (i=1 ; i<probability ; i++) {
switch_flag = i%(digit_length-1);
unsigned char temp = digit[switch_flag];
digit[switch_flag] = digit[switch_flag+1];
digit[switch_flag+1] = temp;
// Print Digit
for (j=0 ; j<digit_length ; j++)
printf("[%d]",digit[j]);
printf("\n");
}
return 0;
}
将digit_length设置为3时的输出:
[0][1][2]
[0][2][1]
[2][0][1]
[2][1][0]
[1][2][0]
[1][0][2]
将digit_length设置为4时的输出:
[0][1][2][3]
[0][2][1][3]
[0][2][3][1]
[2][0][3][1]
[2][3][0][1]
[2][3][1][0]
[3][2][1][0]
[3][1][2][0]
[3][1][0][2]
[1][3][0][2]
[1][0][3][2]
[1][0][2][3]
[0][1][2][3]
[0][2][1][3]
[0][2][3][1]
[2][0][3][1]
[2][3][0][1]
[2][3][1][0]
[3][2][1][0]
[3][1][2][0]
[3][1][0][2]
[1][3][0][2]
[1][0][3][2]
[1][0][2][3]
digit_length大于3时的结果与预期不符 我不知道我应该使用哪个关键字进行搜索,所以我在这里问 请帮帮我
编辑:
我在这里找到了答案:
http://www.geeksforgeeks.org/write-a-c-program-to-print-all-permutations-of-a-given-string/
答案 0 :(得分:3)
我不想为你编写整个代码,但你最好的选择是以下递归方法。要生成集合S的所有排列:
换句话说,{0,1,2,3}的排列是