数字分解为不同自然数的最大乘积

来源:互联网 发布:网络剧小心超人与伽罗 编辑:程序博客网 时间:2024/06/05 14:21

须知:任何一个数分解成非1的两个数的乘积必然大于这个数本身,所以根据此道理可知要想使数分解的乘积最大则分解的数越小越好,最好能够全都分解成2.当然大多数情况都不允许重复,所以呢,就必须从2开始往上加,当加到不能在加时必然会有一个余数。如何处理这个余数是个问题?为了使乘积最大应当从已分解得数的数组最小开始尝试加余数,如果加余数后的值大于本数组的最大值,则此时的数组就是最大乘积的情况了。OK

相关水题:poj1032

解题代码:

#include<iostream>#include<cstdio>using namespace std;int main(){    int n,ans=1,a[50],k=0,m,temp;    scanf("%d",&n);    m=n;    for(int i=2;i<n;i++)    {        m-=i;        if(m<0)        {            m+=i;            break;        }        else            a[k++]=i;    }    for(int i=0;i<k;i++)        if(a[i]+m>a[k-1])        {            a[i]=a[i]+m;            temp=a[i];            for(int j=i;j<k-1;j++)                a[j]=a[j+1];            a[k-1]=temp;            break;        }    for(int i=0;i<k;i++)        printf("%d ",a[i]);    printf("\n");    return 0;}


0 0