/*
编程求解:
输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中 随意取几个数 ,
使其和等于 m , 要求将其中所有的可能组合列出来 .
*/
#include<iostream>
using namespace std;
void dfs( bool flag[] , const int depth , const int max_depth , const int sum , int cur ){
//找到一组有效解
if( cur == sum ) {
int i;
for( i = 1 ; i < depth ; i ++ ) {
if( flag[ i ] ) {
cout << i << " ";
}
}
cout << endl;
}
if( cur < sum ) {
if( depth < max_depth ){
//选第depth个数
flag[ depth ] = true;
dfs( flag , depth + 1 , max_depth , sum , cur + depth );
//不选第depth个数
flag[ depth ] = false;
dfs( flag , depth + 1 , max_depth , sum , cur );
}
}
}
int main() {
int n;
int sum;
bool flag[ 100 ] = { false };
cout << "输入n" << endl;
cin >> n;
cout << "输入和" << endl;
cin >> sum;
dfs( flag , 1 , n + 1 , sum , 0 );
}
组合数
最新推荐文章于 2023-06-14 10:01:32 发布