問題描述###
輸入一個整數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 +" ");
}
}
}
}
`