問(wèn)題描述###
輸入一個(gè)整數(shù)n,然后簡(jiǎn)化為求一組各不相同的數(shù)胎源,它們的和等于n译株,它們的乘積最大瓜喇。
難點(diǎn)###
需要不同的數(shù),且乘積最大歉糜,那么數(shù)之間的差距就應(yīng)該最小
->那么用一組連續(xù)的自然數(shù)來(lái)表示最好
求一組數(shù)2,3,...,w
1>.如果它們的和等于n,那么這組數(shù)就是使得乘積最大的數(shù)乘寒。
2>如果它們的和為sum,且n-sum==w匪补,那么使得乘積最大的數(shù)為3,4,...,w,w+2,即前面幾個(gè)數(shù)加1伞辛,最后一個(gè)數(shù)加2
3>如果它們的和為sum,且n-sum<w,那么就將這n-sum個(gè)1分別加到這組數(shù)的后n-sum個(gè)數(shù)上。
參考:http://blog.csdn.net/rongyongfeikai2/article/details/6006653
代碼實(shí)現(xiàn)###
`
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 +" ");
}
}
}
}
`