问题描述###
输入一个整数n,然后简化为求一组各不相同的数,它们的和等于n,它们的乘积最大。
难点###
需要不同的数,且乘积最大,那么数之间的差距就应该最小
->那么用一组连续的自然数来表示最好
求一组数2,3,...,w
1>.如果它们的和等于n,那么这组数就是使得乘积最大的数。
2>如果它们的和为sum,且n-sum==w,那么使得乘积最大的数为3,4,...,w,w+2,即前面几个数加1,最后一个数加2
3>如果它们的和为sum,且n-sum<w,那么就将这n-sum个1分别加到这组数的后n-sum个数上。
参考:http://blog.csdn.net/rongyongfeikai2/article/details/6006653
代码实现###
`
package poj;
import java.util.Scanner;
public class poj1032 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.close();
// System.out.println(n);
int sum = 0;
int i = 0;
for(i = 2 ; i <= n - sum ; i ++){
// System.out.print2(i+" ");
sum += i;
}
i --;
// System.out.println();
// System.out.println("end:"+ i);
// System.out.println("left:"+(n-sum));
int len = i -1;
// System.out.println("len:"+len);
if(n-sum == 0){
for(int j = 2 ; j < i + 1 ; j ++){
if(j == i)
System.out.print(j);
else
System.out.print(j+" ");
}
}
else if( i == n - sum){
for(int j = 2 ; j < i + 1 ; j ++){
if(j == i)
System.out.print(j + 2);
else
System.out.print(j + 1 +" ");
}
}else{
for(int j = 2 ; j < i + 1 ; j ++){
if( j == i){
System.out.print(j+1);
}
else if(j > 1+len - (n-sum) && j != i)
System.out.print(j + 1+" ");
else
System.out.print(j + 0 +" ");
}
}
}
}
`