先盡量把數字堆高像是1 2 3 2 1,然後再慢慢湊成正確數字
code
#include <bits/stdc++.h>
using namespace std;
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
while (cin >> n) {
vector<int> ans;
int max = int(pow(n, 0.5));
int rest = n - max * max;
for (int i = 1; i < max + 1; i++) {
ans.push_back(i);
if (i == rest) {
ans.push_back(i);
}
}
for (int i = max - 1; i > 0; i--) {
ans.push_back(i);
}
int all;
all=accumulate(ans.begin(), ans.end(), 0);
while(all<n){
auto big=max_element(ans.begin(), ans.end());
for(int i=big-ans.begin();i>=0;i--){
if(ans[i]<=n-all){
ans.insert(ans.begin()+i, ans[i]);
all+=ans[i];
break;
}
}
}
for(int i=0;i<ans.size();i++){
cout<<ans[i]<<' ';
}
cout<<'\n';
}
}