c语言编程排列组合

c语言编程怎么编写Cmn?比如C51等于5等于C54

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;
    }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-04
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=&num;//计数器 地址。p[n]='\0';//这个不用说啦。printf("\n%d 位密码,每个密码有%d个选择的话,共有:%d个组合。\n",n,len,*i);return 0;}
以上回答你满意么?追问

给个完整的程序,输入mn的值,直接可以得到答案!多谢,急用!

第2个回答  2014-09-05
了解一下字符和数值表达的关系, 以及字串操作
第3个回答  2014-09-04
杨辉三角
第4个回答  2014-09-04
是编写函数算排列组合还是直接替换看到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;
   
}

追问

哥,能用main函数编吗?我是个新手,你这个我理解有难度啊!多谢多谢!

追答

等下,我开一下ide

#include <stdio.h>

int c(int m, int n){
   if(m<=0 || m < n) return 0;
    if(n ==0) return 1;
   int result = m;
   int i = m - 1, j = n;
   for( i = m - 1,j = n; i> j; i-- ){
   result *= i;
   }
    
   int temp = 1;
   for( i = 1; i <=n; i++){
   temp *=i;
   }
   return result /  temp;
    }
int main(){
 int m, n;
scanf( "%d",&m);
scanf( "%d",&n);
printf("%d",c(m,n));
return 0;


}

本回答被提问者采纳