|
板凳
楼主 |
发表于 2020-3-7 19:50:46
|
只看该作者
4、有重复怎么办?假设111223455中选3个,有多少种组合的选法。
重复的时候,不要用布尔数组,改用整数数组,用一个少一个而不是用和不用两种状态!
- #include <iostream>
- using namespace std;
- int a[10];///存放选后的数字
- int b[6]= {0,3,2,1,1,2}; ///表示有几个选择 不是一个
- void pr()
- {
- for(int i=1; i<=3; i++) cout<<a[i]<<' ';
- cout<<endl;
- }
- void pmn(int i)
- {
- if(i>3)pr();
- else
- for(int k=a[i-1]; k<=5; k++)
- if(b[k]>0)
- {
- a[i]=k;
- b[k]--;
- pmn(i+1);
- b[k]++;
- }
- }
- int main()
- {
- a[0]=1;
- pmn(1);
- return 0;
- }
复制代码
注意这里又有个问题,是可以重复的,所以后面选出来的数可以和前面一样,k的初值就是a(i),而不是前面那样的a(i-1)+1,完美的话还要赋初值a(0)=1; |
|