此题直接进行从小到大的暴力全排列,然后进行遍历,每一次遍历相加之后,少一个元素,最后只得到一个元素,在数组的第一位,与sum值进行比较,相等则得到答案。
代码如下
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,sum;
vector<int> a;
int b[11];
cin >> n >> sum;
for(int i = 0;i < n;i++){
b[i] = i + 1;
}
do{
//cout << "aaa";
for(int i = 0;i < n;i++){
a.push_back(b[i]);
}
while(a.size() > 1){
for(int i = 0;i < a.size() - 1;i++){
a[i] = a[i] + a[i + 1];
}
a.erase(a.end() - 1);
}
//cout << a[0] << "\n";
if(a[0] == sum){
for(int i = 0;i < n;i++){
cout << b[i] << " ";
}
return 0;
}
a.clear();
}while(next_permutation(b,b + n));
return 0;
}