输入一组元素,从所给的元素中任意取n个(n<总个数)元素组合,计算可以组合的个数
例如:从a b c d e 中任意取2个元素两两组合,可以有10种方法;设共有m个元素,取n个元素两两组合,共有 m!/(n!*(m-n)!) 种方法。
#include<iostream>
using namespace std;
void input(int *p,int m);
void output(int *p, int m);
int combine(int m,int n);
int fac(int m);
int main()
{
int a[10];
int m, n; //m元素总个数,n组合个数
int f;
cout << "intput the array's number:";
cin >> m;
input(a, m);
output(a,m);
cout << "input the combinatorial numbers:";
cin >> n;
f = combine(m, n);
cout <<m<<" 个元素,任意 "<<n<<" 个数组合,共有 "<< f <<" 种组合方式!" << endl;
return 0;
}
void input(int *p,int m)
{
cout << "input the array:";
for (int i = 0; i < m;i++)
{
cin >> *(p+i);
}
}
void output(int *p, int m)
{
for (int i = 0; i < m; i++)
{
cout<< *(p + i)<<" ";
}
cout << endl;
}
int combine(int m, int n)
{
if (n == 0 || n == m) //取边界条件
{
return 1;
}
else
{
return fac(m) / (fac(n)*fac(m-n)); //调用递归运算
}
}
int fac(int m)
{
if (m==1||m==0)
{
return 1;
}
else
{
return fac(m - 1)*m;
}
}
已测试,可执行。