c语言从n个数中选m个数的组合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言从n个数中选m个数的组合相关的知识,希望对你有一定的参考价值。

c语言从n个数中选m个数的组合

#include<stdio.h>

unsigned long factorial(int n);
unsigned long combination(int n,int m);
int main() 
int n,m;
scanf("%d%d",&n,&m);
printf("combination(%d,%d) = %u\\n",n,m,combination(n,m));
return 0;


unsigned long combination(int n,int m) 
unsigned long res = 1;
res = factorial(n)/((factorial(n - m) * factorial(m)));
return res;


unsigned long factorial(int n) 
int i;
unsigned long f = 1;
for(i = 1;i <= n;i++)
f *= i;
return f;

参考技术A 这个组合为:C(n,m)=n!/m!*(n-m)!
所以,会做阶乘,就可以做这个公式了。

#include<stdio.h>

int fact(int n) //阶乘函数;

int pro;//pro,即product,乘积,

if(n<=1)

pro=1;

else

pro=n*fact(n-1);

return(pro);



int main()

int n,m;

int fact(int);//实现阶乘的函数

printf("Input n,m,(m<=n):");

scanf("%d%d",&n,&m);

while(n<m)

printf("error!");

scanf("%d%d",&n,&m);



printf("C(%d,%d)=%d\n",n,m,fact(n)/(fact(m)*fact(n-m)));

return 0;

参考技术B 这个组合为:C(n,m)=n!/m!*(n-m)!
所以,会做阶乘,就可以做这个公式了。

#include<stdio.h>

int fact(int n) //阶乘函数;

int pro;//pro,即product,乘积,

if(n<=1)

pro=1;

else

pro=n*fact(n-1);

return(pro);



int main()

int n,m;

int fact(int);//实现阶乘的函数

printf("Input n,m,(m<=n):");

scanf("%d%d",&n,&m);

while(n<m)

printf("error!");

scanf("%d%d",&n,&m);



printf("C(%d,%d)=%d\n",n,m,fact(n)/(fact(m)*fact(n-m)));

return 0;
参考技术C 这个组合为:C(n,m)=n!/m!*(n-m)!
所以,会做阶乘,就可以做这个公式了。

#include<stdio.h>

int fact(int n) //阶乘函数;

int pro;//pro,即product,乘积,

if(n<=1)

pro=1;

else

pro=n*fact(n-1);

return(pro);



int main()

int n,m;

int fact(int);//实现阶乘的函数

printf("Input n,m,(m<=n):");

scanf("%d%d",&n,&m);

while(n<m)

printf("error!");

scanf("%d%d",&n,&m);



printf("C(%d,%d)=%d\n",n,m,fact(n)/(fact(m)*fact(n-m)));

return 0;

参考技术D 随机?所有?

组合(1-m中选n个数)

#include<stdio.h>
int a[100],b[100]={0},m,n;
bool p(int k)//定义一个bool类型函数 ,用来判断
{
if(b[k]==1)
{
return false;
}
return true;
}
void s(int k)//定义一个函数,用来回溯;
{

for(int i=a[k-1];i<=m;i++)
{
a[k]=i;//将i填进数组里
if(p(i))// 判定i是否用过
{
b[i]=1;//标记
if(k==n)//如果填完了
{
for(int j=1;j<=n;j++)//输出
{
printf("%d ",a[j]);
}
printf("\n");
}
else
{
s(k+1);//调用自己
}
b[i]=0;//取消标记
}
}
a[k]=0;//归零
}
int main()
{
scanf("%d%d",&m,&n);//输入m,n;
for(int i=1;i<=m;i++)//定义第一个数
{
a[1]=i;
b[i]=1;
s(2);
}

return 0;
}

hahahahahahaha

以上是关于c语言从n个数中选m个数的组合的主要内容,如果未能解决你的问题,请参考以下文章

c++编程 从n个数中选出m个数进行组合

简单的C语言问题 Description 输入一串小些字母(无重复字母),从中取出k个字母,输出组合情况。

C语言编程实现:从N位数字串中删掉M个数使剩下的数字串所表示的数值最小。

递归实现从n个数中选r个数的组合数

C语言求范围之内素数的和与个数?

组合(1-m中选n个数)