c语言找组合程序设计,C语言实现排列/组合算法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/*

*  文件名:Permutation.c

*  用途:全排列算法

*  编程环境:WinXP SP2+CL 8.0

*  完成日期: 2006.2   Ver 0.01

*  作者: 88250

*  联系方式: E-mail: DL88250@gmail.com  QQ:845765

*/

#include 

#include 

int count = 0;

void permutation(char per[], int m, int len)

{

int i;

char tmp;

if (m 

permutation(per, m + 1, len);

for (i = m + 1; i 

/* 选当次的排列“头” */

tmp = per[m];

per[m] = per[i];

per[i] = tmp;

permutation(per, m + 1, len);

/* 恢复上一次的排列 */

tmp = per[m];

per[m] = per[i];

per[i] = tmp;

}

}else{

++count;        /* 对排列进行计数 */

/* 调整一下格式^^ */

printf("%s ", per);

}

return;

}

int main(void)

{

int i = time(NULL);

char per[] = "ABCD";

permutation(per, 0, strlen(per));

printf("The total: %d" , count);

return 0;

}

/*

*  文件名:Combination.c

*  用途:组合算法

*  编程环境:WinXP SP2+CL 8.0

*  完成日期: 2006.2   Ver 0.01

*  作者: 88250

*  联系方式: E-mail: DL88250@gmail.com  QQ:845765

*/

#include 

#define MAX_NUM 20

int comb[MAX_NUM];

void combination(int m, int n)

{

int i, j;

for (i = m; i >= n; i--){

comb[n] = i;        /* 选择当前的“头”元素 */

if (n > 1){

/* 进入下一次更小的组合问题 */

combination(i - 1, n - 1);

}else{

/* 满了需要的组合数,输出 */

for (j = comb[0]; j > 0; j--){

printf("%c", comb[j] + 64);

}

printf(" ");

}

}

return;

}

int main(int argc, char *argv[])

{

comb[0] = 2;

combination(4, comb[0]);        /* C(4, 2) */

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值