//把自然数N分解成若干个互不相同的正整数,使乘积最大;
/**
题意挺晦涩的,就是说要维持这个会议召开需要满足几个条件,而要会议召开最久需要这个条件尽可能久的维持
接着就需要了将整数N分解任意个不同的整数,使这些整数的乘积最大
将N分解为N=a1+a2+a3+..+ak
可以归纳出这么一些规律
1.a1>1 如果a1=1,那么将a1加到ak上,必然使得到的这个乘积大于原来的乘积
2.2>=a[i+1]-a[i]>=1,因为如果出现>2,可以将a[i+1],a[i]改为a[i+1]-1,a[i]+1,使得到的乘积更大
3.最多只有一个i,使得a[i+1]-a[i]=2
反证法,假设i

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        int sum =0;
        int h = 2;
        while(1)
        {
            sum+=h;

            if(sum>n)
            {

                sum-=h;
                h--;
                break;
            }
            h++;
        }
        int gg = n-sum;
        int top = 1;
        if(h==gg)
        {
            for(int i=3;i<=h;i++)
            {
                if(top)top=0 ;
                else printf(" ");
                printf("%d",i);
            }
                if(top)top=0 ;
                else printf(" ");
                printf("%d",h+2);
        //例13
        //3 4 6
        }
        else
        {
            for(int i=2;i<=h-gg;i++)
            {
                if(top)top = 0;
                else printf(" ");
                printf("%d",i);
            }
            for(int i=h-gg+1;i<=h;i++)
            {

                if(top)top = 0;
                else printf(" ");
                printf("%d",i+1);
            }
            //例16
            //2 3 5 6
        }
        printf("\n");
    }
}
//https://blog.csdn.net/nameofcsdn/article/details/53334497