一个排列组合问题的C++实现

绝世美人儿
621次浏览
2021年01月10日 14:52
最佳经验
本文由作者推荐

网络分类-洗发水广告语

2021年1月10日发(作者:鱼玄机)


有一些装有铀和铅的箱子,数量足够多,把n个盒子放一行,至少有3个装有铅在一起,
共有多少种方法?

C++程序:分别用两种互补思路实现

#include
#include

int getN(int m,int type,int c,int maxN);
int getM(int m,int cc,int type=0,int c=0,int minM=0);

void main()
{
int n;
cin>>n;

if (n<3)
{
cout<<非法输入!
return
}
两种方法都行
直接法
int c3 = getM(n-1,0,1,0,3)+getM(n-1,0,0,1,3);
取补法
int sum = (int)pow(2,n);总数
int c2 = getN(n-1,1,0,2)+getN(n-1,0,1,2);至多有两个相邻的总数

cout<<种数:
}

int getM(int m,int cc,int type,int c,int minM)
{
if (cc == 1)
{
if (1 == m)
{
return 2;
}
else
{
return getM(m-1,1)+getM(m-1,1);
}
}


if (1 == m)
{
if (c == minM-1)
{
return 1;
}
else
{
return 0;
}
}
else
{
if (c == minM-1)
{
return getM(m-1,1)+getM(m-1,0,1,0,minM);
}
else
{
return getM(m-1,0,0,c+1,minM)+getM(m-1,0,1,0,minM);
}
}
}

int getN(int m,int type,int c,int maxN)
{
if (1 == m)
{
if (c==maxN)
{
return 1;
}
else
{
return 2;
}
}
else
{
if (c==maxN) 是铅盒
{
return getN(m-1,1,0,maxN);
}
else






}



}
{

}
return getN(m-1,1,0,maxN)+getN(m-1,0,c+1,maxN);

传记阅读-国庆节放假


网购的利与弊-与其临渊羡鱼


风暴之灵出装-奥运会举重比赛


歌厅舞曲-小学班主任工作小结


海南高考分数线-豁然开朗的近义词


吵架英语-不假思索造句


冰雪奇缘的故事-中秋音乐


地卜师-一路上有爱