http://poj.org/problem?id=1032

来源:互联网 发布:清华大学刘树红 知乎 编辑:程序博客网 时间:2024/06/05 05:44

题意:给你一个自然数,把这个自然数拆分,使得拆分后的各个数相乘积最大。。。

思路:尽可能的使得拆分的数间差值不大,,

详细证明请看:http://blog.himdd.com/?p=1918

AC代码:

#include<iostream>#include<cstdio>#include<string.h>#define N 1005using 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;}