这个数可以重复,如:3*3*2,当然这只是例子。下面是某人说的,说得像自言自语似的,谁也看不懂。
1 先看一个原则,相等的数相乘最大 
n*n > (n-1)*(n+1)=n*n-1 
所以相等的2个数相乘,乘积最大 
2 看看前面的几个数字 
对于和为6 
2*2*2 = 8 
3*3 = 9 所以3的大 
4 我们不考虑了,因为2*2=4 他是平衡点 
5 本身就没有 2×3 大, 
5以上的就更不用考虑了,因为随便拆开都比他大 
所以3是拐点。 
也就是尽可能拆分成3,乘积最大 100 能拆成33个3 和1个1,这样1就浪费了,所以拆成 32个3和一个4就行了。
思路是什么?

解决方案 »

  1.   

    这是数学问题 不是java问题
      

  2.   

    首先 我们根据n*n > (n-1)*(n+1)=n*n-1知道要拆成相同的数 忽略整数的条件 我们设最大时把100拆成n分 也就是要求f(n)=(100/n)^n的最大值
    对f(n)求导 f'(n)=[n^n*100^n*ln100-n^n*100^n*(1+lnn)]/n^2n
    令其等于0 得ln100-1-lnn=0 即ln(100/e)=lnn 所以n=100/e 所以在理想状态下 应该取自然对数e 而自然数中最接近e的是3 所以得出拆成32个3和一个4