• 整数最优分解问题


    Description设n是一个正整数。现要求将n分解为若干个自然数的和,且使这些自然数的乘积最大。 对于给定的正整数n,编程计算最优分解方案。
    Input第1行是正整数n。(n<10000)
    Output将计算出的最大乘积输出

    Sample Input

    10

    Sample Output

    36




    #include<stdio.h>
    long b[160]={0};
    long calculate(int m,int n)
    {
    long k;
    long i,j,d=0,p=0,t;
    b[0]=3;
    for(i=1;i<m+n;i++)
    {
    if(i<m)t=3;
    else t=2;
    for(j=0;j<160;j++)
    {
    k=b[j]*t+d;
    b[j]=k%10000000000;
    d=k/10000000000;
    }
    if(d)b[j]=d;
    }
    for(i=159;i>=0;i--)
    if(b[i]){p=i;break;}
    return p;
    }
    void main()
    {
    long k1,k2;
    long i,p,n;
    scanf("%ld",&n);
    if(n<4)printf("%ld",n-1);
    else if(n==4)printf("4");
    else
    {
    if(n%2==0)k1=n/6*2,k2=n%6/2;
    else k1=(n-3)/6*2+1,k2=(n-3)%6/2;
    p=calculate(k1,k2);
    printf("%ld",b[p]);
    for(i=p-1;i>=0;i--)
    {
    if(b[i]>999999999){printf("%ld",b[i]);continue;}
    if(b[i]>99999999){printf("0%ld",b[i]);continue;}
    if(b[i]>9999999){printf("00%ld",b[i]);continue;}
    if(b[i]>999999){printf("000%ld",b[i]);continue;}
    if(b[i]>99999){printf("0000%ld",b[i]);continue;}
    if(b[i]>9999){printf("00000%ld",b[i]);continue;}
    if(b[i]>999){printf("000000%ld",b[i]);continue;}
    if(b[i]>99){printf("0000000%ld",b[i]);continue;}
    if(b[i]>9){printf("00000000%ld",b[i]);continue;}
    printf("000000000%ld",b[i]);
    }
    }
    printf(" ");
    }

  • 相关阅读:
    代理的原理
    nodemon:让node自动重启
    http与https的区别
    Content-Type:几种常用数据编码格式
    vue ssr服务端渲染
    vue 实现文件上传和文件下载
    vue element-ui表格里时间戳转换成时间显示
    vue npm start 自动打开网页
    yearProgress.vue
    vuejs中class与style的绑定
  • 原文地址:https://www.cnblogs.com/zhang20115330/p/3151628.html
Copyright © 2020-2023  润新知