洛谷题目:P1249 最大乘积
题目描述:
一个正整数一般可以分为几个互不相同的自然数的和,如 3=1+2,4=1+3,5=1+4=2+3,6=1+5=2+4。
现在你的任务是将指定的正整数 nn 分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大。
输入格式
只一个正整数 n,( 3 ≤ n ≤ 10000 )。
输出格式
第一行是分解方案,相邻的数之间用一个空格分开,并且按由小到大的顺序。
第二行是最大的乘积。
输入输出样例
输入:
10
输出:
2 3 5
30
我的代码:
package 算法竞赛;
import java.io.*;
import java.math.BigInteger;
public class Test6 {
static BufferedReader ins = new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer in = new StreamTokenizer(ins);
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException{
in.nextToken();
int a = (int)in.nval;
if(a == 3)
{
System.out.println(3);
System.out.println(3);
System.exit(0);
}
int i;
int sum = 0;
int[] ints = new int[a];
for(i = 2;sum<=a;i++)
{
ints[i]=1;
sum+=i;
}
sum-=i;
sum++;
ints[i-1]=0;
i-=2;
int ys = a - sum;
int t = i;
while(ys!=0)
{
ints[i]++;
ys--;
i--;
if(i<2)
{
i=t;
}
}
BigInteger sum2 = new BigInteger("1");
for(i = 0;i<ints.length;i++)
{
if(ints[i]!=0)
{
int t2 = i-1+ints[i];
out.print(t2+" ");
sum2 = sum2.multiply(BigInteger.valueOf(t2));
}
}
out.println();
out.println(sum2);
out.close();
}
}
思路提供者:
?
1、遇见题目没有思路就列举数据,看看答案中是否有规律可循 2、本题处理循环余数的方法值得看看
|