若干个不同的自然和为定值,这些自然数乘积最大为多少?
2017-04-12 22:08
1156 查看
大致分析下:想要乘积最大,那么所乘的自然数个数就要尽量多,有常规的施瓦茨不等式可知,两个数和为定值,当两个数相等时候积最大,也就是数的差越小越好。基于此,若干个自然数和为定值,要使积最大就需要自然数个数尽量多,自然数之间差尽量小。我们可以从2开始累加,一直加到最接近和为止。比如和为定值15,我们从2加到5,2+3+4+5=14,此时等,14,距离15还差1,现在已经达到自然数个数尽量多了,接下来就是差尽量小,且是互不相同的自然数。我们把差的1从最小的2依次累加,直到第一次出现不包含的数(也可以说第一次出现比找到最多自然数中最大的那个还大为止,这里面最大的就是5),2+1=3,已经有了,不符合!3+1=4,也已经有了,不符合!4+1=5也已经有了,不符合!5+1=6,符合!并把5替换为6所以2*3*4*6=144,就是和为15的若干个不相同自然的,乘积最大值。再比如若干个不同的自然和为18,乘积最大,也可以据此分析出来,2+3+4+5=14,距离18还差4,分别4依次从2开始累加,直到第一次不包含的数,发现2+4=6,第一次就找到了,然后把2替换为6,所,18=3+4+5+6,3*4*5*6=360.
Java代码实现如下:
以下是代码运行情况:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/16/6867280063e80f6769939fd926a7c46e)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/16/de11ac315ec3aa738ce8db29a38560d6)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/16/8f42e066bdda7231013fdc658b0f87bc)
程序是临时写的,还有需要改进的地方,如果你也有觉得可以修改的地方,请指正下。谢谢。
Java代码实现如下:
import java.util.*; public class Main { static int run(String numbers){ int start=2; int total=0; int result=1; int tmp=0; int k = Integer.parseInt(numbers); ArrayList<Integer> al = new ArrayList<Integer>(); //存储从2开始累加的数。 while(k-total>=start)//直到最接近所给的定值为止。 { total+=start; al.add(start); start++; } if(k>total){ tmp = k-total; start=2; int i=0; for(i=0;al.contains(start+tmp)&&i<al.size();i++)//容器里面不包含的那个数且,没有超出范围 start++; al.set(start-2, start+tmp);//替换为那个第一次出现不包含的数。 } int j; for(j=0;j<al.size();j++) result*=al.get(j); return result;//返回积最大结果 } public static void main(String[] args) { Scanner scan = new Scanner(System.in); int res = run(scan.nextLine()); System.out.println(res); scan.close(); } }
以下是代码运行情况:
程序是临时写的,还有需要改进的地方,如果你也有觉得可以修改的地方,请指正下。谢谢。
相关文章推荐
- 一个正整数n被分成若干个不同自然数的和,求组成n的一组自然数的最大乘积
- 有一个正整数N可以分解成若干个正整数之和,问如何分解能使这些数的乘积最大?
- poj 1032 将一个数分成几个不同的数之和,满足这些数的乘积最大。
- (Relax 水题1.2)POJ 1032 Parliament(将n分解成若干个互不相等的整数的和,并且是这些整数的乘积最大)
- (Relax 水题1.2)POJ 1032 Parliament(将n分解成若干个互不相等的整数的和,并且是这些整数的乘积最大)
- 有一个整数n,将n分解成若干个整数之和,问如何分解能使这些数的乘积最大,输出这个乘积m
- 把自然数N分解成若干个互不相同的正整数,使乘积最大
- 有一个正整数N可以分解成若干个正整数之和,问如何分解能使这些数的乘积最大?
- 数字分解为不同自然数的最大乘积
- poj 1032 Parliament 把自然数N分解成若干个互不相同的正整数,使乘积最大;
- poj 1032 Parliament(正整数拆分不同数使乘积最大)
- 把正整数n表示成若干个不同的正整数的和,求积的最大值
- 字典序打印1到n的自然数 与 1打印到最大的n位数是不同的
- 随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数
- 欧拉计划十一题:在20×20的网格中同一直线上四个数的最大乘积是多少?(perl二维数组的应用)
- LeetCode96_Unique Binary Search Trees(求1到n这些节点能够组成多少种不同的二叉查找树) Java题解
- 共有5中颜色的球若干个,取3个球,每个颜色都不同,问有多少种取法;
- 现有一组砝码,重量互不相等,分别为m1,m2,m3…mn; 每种砝码对应的数量为x1,x2,x3...xn。现在要用这些砝码去称物体的重量,问能称出多少中不同的重量。
- 将一个正整数拆分成若干个互不相同的正整数且乘积最大(JS)
- 某人有8角的邮票5张,1元的邮票4张,1元8角的邮票6张,用这些邮票中的一张或若干张可以得到多少中不同的邮资?