从m个数中任意去n个数的组合

总共有m个数字,从m个数字中找出n个数字的组合。

 

int b[100];
int m=10;//总共10个数字 0,1,2,3,4,5,6,7,8,9
int n=4;//选择4个数字 
//从m中选取n个数 i表示当前选择的个数 i==n时候输出 k表示从第k个数字开始
void com(int i,int k)
{
	if(i<n)
	{
		for(int j=k;j<=m-n+i;j++)//从k到m-n+i中找组合
		{
			b[i]=j;
			com(i+1,j+1);
		}
	}
	else
	{
		for(int p=0;p<n;p++)
			cout<<b[p]<<" ";
		cout<<endl;
	}
}


 调用

com(0,0)

 

上述的方案 看起来十分粗糙,下面是改进的方案。

n为组合包含元素个数, cur当前包含个数,col数组 id为编号
#define len 9
void test2(int n,int cur,std::vector<int> col,int id)
{
 	if(cur==n)
	{
		vector<int>::iterator iter=col.begin();
		for(;iter!=col.end();iter++)
		{
			cout<<*iter<<" ";
		}
		cout<<endl;
	}
	else
	{
		for(int k=id;k<len;k++)
		{
			col.push_back(k);
			test2(n,cur+1,col,k+1);
			col.pop_back();
		}
	}
}


 

 

 

 

你可能感兴趣的:(从m个数中任意去n个数的组合)