C++ 组合数问题

输入一组元素,从所给的元素中任意取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;
	}
}

已测试,可执行。

猜你喜欢

转载自blog.csdn.net/weixin_43718414/article/details/84572772