题目:
b 个男生, g 个女生排队,男生最多 k 个连续的排在一起,男女内部不作区分,即g1=g2,b1=b2.请问一共有多少种排队方式。
递归的方法:
#include<iostream>
using namespace std;
class solution
{
public:
solution(int b,int g,int k):B(b),G(g),K(k){num=0;}
void mainfunc(){
func(B,G,0);
}
void func(int cb,int cg,int flag);
int getnum(){
return num;
};
private:
int B,G,K;//男女生人数以及限制k
int num; //排列的方法个数
};
//记男生为1,女生为0,flag记录男生连续个数
//cb为剩余多少男生,cg为剩余多少女生
void solution::func(int cb,int cg,int flag)
{
if(!cb&&!cg)num++;
if(cg>0)func(cb,cg-1,0);
if(cb>0)
{
if(flag+1<=K)func(cb-1,cg,flag+1);
if(flag==K)return;
}
}
int main()
{
int boy = 5;
int girl = 2;
int limit = 2;
solution X(boy,girl,limit);
X.mainfunc();
cout<<X.getnum();
return 0;
}