c语言编程数字字母排列组合,如何编程实现排列组合

怎么编程实现排列组合?

例如

编程实现从5人里面随机选3个人出来。有多少种不同的选法?

该如何编写?

需要用到 头文件MATH.H吗,若不用到该怎么写?

谢谢!

------解决方案--------------------

#include 

int main()

{

int i, j, k;

for (i = 1; i <= 5; i++) {

for (j = 1; j <= 5; j++) {

if (j == i) continue;

for (k = 1; k <= 5; k++) {

if (k == i

------解决方案--------------------

k == j) continue;

printf("i = %d, j = %d, k = %d\n", i, j, k);

}

}

}

return 0;

}

------解决方案--------------------

#include 

#include 

#define MAX_NUM 26

int comb[MAX_NUM];

int c1,c2;

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",'A'+c1-comb[j]);

printf("\n");

}

}

return;

}

int main(int argc,char **argv) {

if (argc<3) {

printf("%s 组合下标 组合上标\n",argv[0]);

return 1;

}

c1=atoi(argv[1]);

if (c1<1

------解决方案--------------------

MAX_NUM

printf("1<=组合下标<=%d\n",MAX_NUM);

return 2;

}

c2=atoi(argv[2]);

if (c2<1

------解决方案--------------------

c1

printf("1<=组合上标<=组合下标\n");

return 3;

}

comb[0]=c2;

combination(c1,c2);

return 0;

}

------解决方案--------------------

“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!

递归函数关注以下几个因素

·退出条件

·参数有哪些

·返回值是什么

·局部变量有哪些

·全局变量有哪些

·何时输出

·会不会导致堆栈溢出

------解决方案--------------------

//qplw.cpp

#include 

#include 

#include 

int v=0;

int w=0;

int m;//记录字符串长度

int n;//记录字符串中的字符种类数

char map[256];//记录是哪几种字符

int count[256];//记录每种字符有多少个

int stack[1000];//递归用的栈,并记录当前生成的排列

void Make_Map(char *str) {//统计字符串的相关信息

int s[256];

int i;

memset(s,0,sizeof(s));

memset(count,0,sizeof(count));

m=strlen(str);

if (w<1

------解决方案--------------------

m

while(*str) {

s[*str]++;

str++;

}

n=0;

for (i=0;i<256;i++)

if (s[i]) {

map[n]=i;

count[n]=s[i];

n++;

}

}

void Find(int depth) {//递归式回溯法生成全排列

if (depth==w) {

int i;

for (i=0;i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值