博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【贪心】最大乘积-贪心-高精度-java
阅读量:4312 次
发布时间:2019-06-06

本文共 1221 字,大约阅读时间需要 4 分钟。

问题 G: 【贪心】最大乘积

时间限制: 1 Sec  内存限制: 128 MB
提交: 34  解决: 10
[][][]

题目描述

 一个正整数一般可以分为几个互不相同的自然数的和,如3=1+2,4=1+3,5=1+4=2+3,6=1+5=2+4,…。
现在你的任务是将指定的正整数n分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大。

输入

只一个正整数n,(3≤n≤10000)。

输出

第一行是分解方案,相邻的数之间用一个空格分开,并且按由小到大的顺序。
第二行是最大的乘积。

样例输入

10

样例输出

2 3 530 思路:要求乘积最大,就得让每一个数尽量地接近,从2,开始分,最后剩下的数依次从后面加到前面的数上面(每个数加上1)。例如10,分开后是2,3,4,剩下1,加到最后面的4上成2,3,5.如果是18,依次是2,3,4,5剩下4,依次加到前面的数上是3,4,5,6. 代码:
import java.math.BigInteger;import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner scc=new Scanner(System.in);        BigInteger big1=new BigInteger("1");        int a[]=new int[3000];        int n;        int sum=2;        a[0]=2;        n=scc.nextInt();        int i=1;        int j=0;        while(true){            a[i]=a[i-1]+1;            if(sum+a[i]>n){                break;            }else{                sum+=a[i];            }            i++;        }        a[i]=n-sum;        j=i-1;        while(a[i]!=0&&j>=0){            a[j]++;            a[i]--;            j--;        }        j=i-1;        while(a[i]!=0&&j>=0){            a[j]++;            a[i]--;            j--;        }        for(int k=0;k

 

 

转载于:https://www.cnblogs.com/TWS-YIFEI/p/5695208.html

你可能感兴趣的文章
vector--C++ STL 学习
查看>>
蜕变成蝶~Linux设备驱动之异步通知和异步I/O
查看>>
jquery简单开始
查看>>
IOS 在不打开电话服务的时候,可以响应服务器的推送消息,从而接收服务器的推送消息...
查看>>
置顶的博客
查看>>
ionic2 native app 更新用户头像暨文件操作
查看>>
SQL Server R2 地图报表制作(一)
查看>>
ZeroMQ——一个轻量级的消息通信组件
查看>>
JavaScript中数组和json的复制
查看>>
C语言多线程编程二
查看>>
转载:从集群计算到云计算
查看>>
服务器文件管理
查看>>
作业2
查看>>
ios上架报错90080,90087,90209,90125 解决办法
查看>>
给button添加UAC的小盾牌图标
查看>>
如何退出 vim
查看>>
Robberies
查看>>
get post 提交
查看>>
R安装
查看>>
跟我一起学C++
查看>>