全排列问题(c语言实现)

时间:2023-03-10 07:15:32
全排列问题(c语言实现)

问题描述:

假设有数组里面存放26个字母,取出n个,以m个排列,计算排列的总数!

注意:

(1) m<n

(2) 里面的元素不能重复排列

(3)"遇零则止"

核心代码如下:

#include <stdio.h>
#include <malloc.h> #include "../include/permutation.h"
#include "../include/mec.h" static void permutate(char *result, boolean *beUsed, int i,
int n, int m, char *alpha); static void permutate(char *result, boolean *beUsed, int i,
int n, int m, char *alpha) {
int index; if (i >= m) { //递归的结束条件
result[i] = 0;
printf("%s\n", result); return;
}
for (index = 0; index < n; index++) {
if (beUsed[index] == FALSE) {
beUsed[index] = TRUE; //使使用的那个位子赋值为TRUE表示用过了
result[i] = alpha[index];   //放该元素
permutate(result, beUsed, i+1, n, m, alpha);
beUsed[index] = FALSE;
}
}
} void permutatation(char *alpha, int n, int m) {
char *result;
boolean *beUsed; result = (char *) calloc(sizeof(char), m + 1);
beUsed = (boolean *) calloc(sizeof(boolean), n);   // alpha ABCDEFG n个字符   // beUsed 0000000(若是用过了赋值为1)   //下标 1234567 permutate(result, beUsed, 0, n, m, alpha); free(beUsed);
free(result);
}
执行代码如下: #include <stdio.h>
#include "./include/permutation.h" int main() {
char alpha[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int n;
int m; printf("请你输入n和m:");
scanf("%d%d", &n, &m); permutatation(alpha, n, m); return 0;
}