小蒜想将正整数 nn 拆分为若干个互不相等的自然数之和,问如何拆分可以使得它们的乘积最大?
输入格式
一个正整数 nn。n \le 10000n≤10000。
输出格式
一行,包含若干个互不相等的自然数——乘积最大的一种拆分方案。
这些自然数需从小到大输出,两个自然数之间用单个空格隔开。
Sample Input
15
Sample Output
2 3 4 6
#include <iostream>
using namespace std;
int main()
{
int n,a[10000],sum=0,num=0; //这里要开大一点,防止不够
cin>>n;
if(n==1)
{
cout<<1;
return 0;
}
for(int i=2;i<=n;i++)//先减去i,但可能剩余的数小于i,再从前往后分配
{
if(n>=i)
{
n-=i;
a[num]=i;
num++;
}
}
for(int i=num-1;i>=0;i--)
{
if(n>0)
{
a[i]++;
n--;
}
}
if(n) a[num-1]++; //如果还有剩余,让最后一个加1 //必要 列如n=8
for(int i=0;i<num;i++)
{
cout<<a[i]<<' ';
}
return 0;
}