由于要把n分解成若干个互不相同的的自然数的和,由于互不相同这个条件的限制,分解得到的结果肯定不是乘积最大,因为若分解出的数从大于等于5开始,还可以继续分解,使乘积进一步增大,比如:5可以分解成2+3,而2*3=6,大于5。
而在互不相同条件的限制下,分解出的数应尽量做到越多越好,因此,可以将n分成从2开始的连续自然数的和,这样分解出的数肯定是最多的,如果最后剩下一个数,在后项优先的方式下均匀分摊给前面各项。后项优先的原因是,一方面防止分解出的数出现重复,另一方面是它比前项优先得到的数的乘积要大。
在设计程序时用到的数据结构:
1.用sum变量记录已分解出的数之和,目的是判断是否小于n,从而确定下一次还要不要分解。
2.把分解出的数依次放入一个数组a中,方便输出和计算乘积。
3.对最后剩下的一个数进行分摊时,剩下这个数最大等于已分解出的数的个数加一,若剩下的这个数,等于已分解出的数的个数加一,则给最后一个分解出的数分摊2,否则分摊1。