- 24
- 0
- 约小于1千字
- 约 3页
- 2017-07-19 发布于浙江
- 举报
一个排列组合问题的C实现
有一些装有铀和铅的箱子,数量足够多,把n个盒子放一行,至少有3个装有铅在一起,共有多少种方法?C++程序:分别用两种互补思路实现#include iostream.h#include math.hint 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;cinn;if (n3){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种数: sum c3 c2endl;}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);}}}
原创力文档

文档评论(0)