/*
1.输出字典序最小 :
使用 do{}while(next_permutation(array, array+length)); 大框架
2.next_permutation(array, array+length)
函数基本内容:先进行字典序较小的排列,此时数组排列已经改变,
当前序列不存在下一个排列时,函数返回false,否则返回true
附:permutation 的意思是 排列 。
3.递加逻辑
2022/2/7 fevergo 明鹊 。。。
希望对你有帮助
*/
#include<iostream>
#include<algorithm>
using namespace std;
int a[20] = {0}, b[20] = {0};
int main()
{
int n, sum;
cin>>n>>sum;
for(int i = 0;i<n;i++) // 赋值数组
a[i] = i+1;
int flag = 0; // 判断并终止循环
do
{
for(int i = 0;i<n;i++)
b[i] = a[i]; // 赋值b[n]数组 ,便于操作和输出a[n]数组
for(int j = n-1;j>0;j--) // 累次递加 ,最终的和保存在b[0]中
for(int i = 0;i<n-1;i++)
b[i] += b[i+1];
if(b[0] == sum)
{
flag = 1;
break;
}
}while(next_permutation(a, a+n));
if(flag) // 判断并输出
for(int i = 0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}