题意:给你一个自然数,把这个自然数拆分,使得拆分后的各个数相乘积最大。。。
思路:尽可能的使得拆分的数间差值不大,,
详细证明请看:http://blog.himdd.com/?p=1918
AC代码:
#include<iostream>
#include<cstdio>
#include<string.h>
#define N 1005
using namespace std;
int s[N];
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(s,0,sizeof(s));
int sum=0,i;
for( i=2;sum+i<n;++i)
{
s[i-1]=i;
sum+=i;
}
sum+=i;
s[i-1]=i;
int m=i-1;
if(sum-n==0)
{
for(int i=1;i<m;++i)
printf("%d ",s[i]);
printf("%d\n",s[m]);
}
else if(sum-n==1)
{
for(int i=2;i<m;++i)
printf("%d ",s[i]);
printf("%d\n",s[m]+1);
}
else if(sum-n>=2)
{
for(int i=1;i<m;++i)
if(s[i]!=sum-n)
printf("%d ",s[i]);
printf("%d\n",s[m]);
}
}return 0;
}