代码:
#include<iostream> #include<cstring> using namespace std; //从前往后 选或者不选 int N; int M; void dfs(int u, int sum,int state) { if (sum + N - u < M)//后面的数都选上都达不到M要求 return; if (sum == M)//选了M个数 { for (int i = 0; i < N;i++) if (state >> i & 1) cout << i + 1 << " "; cout << endl; return; } if (u == N)return;//没必要 //从小到大 先选 dfs(u + 1, sum + 1, state | 1 << u);//用这个数 state的第u位置为1 dfs(u + 1, sum, state);//不用这个数 } int main() { cin >> N >> M; dfs(0, 0, 0);//枚举多少个 选了多少个 当前选了哪些数 return 0; }