样例输入
4 16
样例输出
3 1 2 4
解题思路:
一看到这道题,看不出有啥思路,看到 n 的取值范围为 0<n<=10, 直接暴力搜索,使用 C++ STL 全排列函数 next_permutation(arr, arr+size); 一一操作对比,算出结果等于sum则跳出循环
实现代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, sum;
cin>>n>>sum;
int num[n];
for (int i = 0; i < n; ++i) num[i] = i+1;
do {
int cp_num[n];
copy(num, num+n, cp_num);
for (int i = 0; i < n-1; ++i) { // 重复相加操作次数 n-1
for (int j = 0; j < n-i-1; ++j) { // 一次操作需要 n-i-1 次两数相加
cp_num[j] += cp_num[j+1];
}
}
if (cp_num[0] == sum) {
for (int i = 0; i < n; ++i) {
cout<<num[i]<<" ";
}
break; // 退出
};
}while (next_permutation(num, num+n));
return 0;
}