本文主要是介绍http://poj.org/problem?id=1032,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:给你一个自然数,把这个自然数拆分,使得拆分后的各个数相乘积最大。。。
思路:尽可能的使得拆分的数间差值不大,,
详细证明请看: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;
}
这篇关于http://poj.org/problem?id=1032的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!