思路就是:
(1)尽量使得元素是连续的。
(2)如果有多出来的,从后往前均匀分配到各个元素。考虑到一种特殊情况,当多出来的数比前面已有元素的个数大1时(比如8的情况),先给已有元素的最大元素加1,然后再均匀分配到每个元素。
实现代码如下:
public static long DevidePlus(int num) {
int[] array= new int[100];
int i,j;
for(i=0;i<array.length;i++) {
array[i]=0;
}
int temp=2;
i=0;
while(num>=temp) {
array[i]=temp;
num-=temp;
i++;
temp++;
}
while(num>0) {
if(num==array[i-1]) {
array[i-1]++;
num--;
}
for(j=i-1;j>=0&&num>0;j--) {
array[j]++;
num--;
}
}
long ans=1;
for(i=0;array[i]!=0;i++) {
ans*=array[i];
}
return ans;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(DevidePlus(15));
}