题意就是说n = t1 + t2 +…tn,t1,t2 ,…tn互不相等。使Sn = t1 * t2 …tn最大。其实2 3 * 4 * 5…是最大的,然后剩下的数字加到较大的数字上面去,over
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>
#include <stdlib.h>
#include <stdio.h>
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) x<<1
#define r(x) x<<1|1
#define ms(a,b) memset(a,b,sizeof(a))
using namespace std;
int n,len;
int demo[1111];
int main()
{
demo[2] = 2;
for (int i = 3; i < 1111; i++) {
demo[i] = demo[i - 1] + i;
}
cin >> n;
len = upper_bound(demo, demo + 1111,n) - demo;
if (n != demo[len])len--;
//cout << len << endl;
//cout << demo[len] << endl;
int a = 1;
if (len - 1 < n - demo[len]) {
a++;
n -= (len - 1);
//cout << "dasdas" << endl;
}
for (int i = 2; i <= len; i++) {
if (len - i + 1 <= n - demo[len])
cout << i + a;
else
cout << i + a - 1;
if (i != len)
cout << " ";
}
cout << endl;
return 0;
}