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语言问题 Description 输入一串小些字母(无重复字母),从中取出k个字母,输出组合情况。