
5个回答
展开全部
1、求排列组合没有简单方法。方法只有一个,枚举。有几个位置需要列举,就需要几个循环。如果循环数量太多,可以用函数递归来枚举。
2、例程:
#include<stdio.h>
int main(){
int a[4]={1,3,4,7}; //第一个位置
int b[4]={2,5,8,10}; //第二个位置
int c[4]={6,9,11,12}; //第三个位置
int i,j,k;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++)
printf("%d %d %d\n,",a[i],b[j],c[k]);//输出一种排列
getch();
return 0;
}
展开全部
void Show(int n,int len ,char str[], char p[],int *i){/*函数功能说明:
密码穷举法 递归算法参数说明:len 密码可选元素的个数,实际等于 strlen(str);
n 密码位数。
STR[]密码表。
*p 密码排列组合的临时存档*/int a;n--;for(a=0; a < len; a++){p[n]=str[a];
if(n==0)printf("%d:%s ",(*i)++,p);
if(n0)Show(n,len , str,p,i);}}
/*驱动程序 用于测试*/
int main(void){char str[]="abcdef";//密码表 可选元素集合可根据选择修改
int n=4;//密码位数,根据具体应用而定。
int len=strlen(str);//用于密码元素集合计数。
char p[20];//存放排列组合的密码,用于输出。
int num=0;//存放统计个数的整数值,
int *i=#//计数器 地址。
p[n]='\0';//这个不用说啦。
printf("\n%d 位密码,每个密码有%d个选择的话,共有:%d个组合。\n",n,len,*i);return 0;}
以上回答你满意么?
以上回答你满意么?
追问
给个完整的程序,输入mn的值,直接可以得到答案!多谢,急用!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
了解一下字符和数值表达的关系, 以及字串操作
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
杨辉三角
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是编写函数算排列组合还是直接替换看到Cmn就变成数字啊
更多追问追答
追问
输入mn的值就可以得到答案!
追答
那直接就写个函数
int c(int m, int n){
if(m<=0 || m < n) return 0;
if(n ==0) return 1;
int result = m;
for(int i = m - 1,j = n; i> j; i-- ){
result *= i;
}
int temp = 1;
for(int i = 1; i <=n; i++){
temp *=i;
}
return result / temp;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询