题目:
输入描述:
每个测试输入包含2个整数,n和m
输出描述:
按每个组合的字典序排列输出,每行输出一种组合
思路:
获取所有组合,再进行求和,判断是否等于m
实现步骤:
1.获取所有组合
求 1-n 的n个数的组合等价于 求n位二进制数哪几位等于1
即对于 i(i为某个n位二进制数),要知道 i 的哪些位等于1,用一个知道某位上为 1 的数与 i 相与,若结果为 1,则证明i在该位上为 1,输出对应位数
2.存储组合
本文使用 vector<vector<int>> 存储 ,方便求和
代码:
#include <iostream>
#include<vector>
#include <algorithm>
using namespace std;
int main()
{
int n,m;
vector<vector<int>> a; //存储所有组合
vector<int> b; //存储某一个组合
cin>>n;
cin>>m;
int stateCount = 1 << n;
for (int i = 0; i < stateCount; ++i) //对i 循环ÿ