include [HTML_REMOVED]
include [HTML_REMOVED]
include[HTML_REMOVED]
include [HTML_REMOVED]
using namespace std;
const int N=16; //最多有多少位状态
int n; //你要列出前几位的组成序列
int st[N]; //每一位的状态 0表示没决定,1表示选,2表示没选
void dfs(int u) { //这里的n表示从第几位来枚举
if(u > n) { //从1开始枚举到 16位结束 即大于15位的状态 以3为例即枚举到4时候结束。此时我们遍历状态数组,输出选择的元素。
for(int i=1;i<n;i++) {
if(st[i]==1) {
printf(“%d “,i);
}
}
printf(“\n”);
return;
}
st[u] = 2; //第一个分支 不选
dfs(u+1); //第一个分支的决策
st[u] = 0; //恢复现场到没决策时
st[u] = 1; //第二个分支 选
dfs(u+1); //第二个分支的决策
st[u]=0; //恢复现场到没决策的时候
}
int main() {
scanf(“%d”,&n);
dfs(1);
return 0;
}