poj1032Parliament
题意:把一个正整数分成若干个互不相等正整数的和,使得分成的这些数字的乘机最大。
解题思路:把这些数分成从2开始的以1为公差的等差数列即可,如果最后一个数字不够,就从后往前将其它数字加1。
纯粹是一道数学题啊。
代码
1import java.io.*;
2import java.util.*;
3class Main
4{
5 public static void main(String[] args)
6 {
7 Scanner sc = new Scanner(System.in);
8 int N = sc.nextInt();
9 int num[] = new int[200];
10 int count = 2;
11 int i;
12 for(i = 0; ; i++)
13 {
14 if(count <= N){
15 num[i] = count;
16 N -= count++;
17 }
18 else
19 break;
20 }
21 int len = i;
22 for(i = len - 1; i >= 0 && N > 0; i--)
23 {
24 num[i]++;
25 N--;
26 }
27 for(i = len - 1; i >= 0 && N > 0; i--)
28 {
29 num[i]++;
30 N--;
31 }
32 for(i = 0; i < len - 1; i++)
33 System.out.print(num[i] + " ");
34 System.out.println(num[i]);
35 }
36}
37
1import java.io.*;
2import java.util.*;
3class Main
4{
5 public static void main(String[] args)
6 {
7 Scanner sc = new Scanner(System.in);
8 int N = sc.nextInt();
9 int num[] = new int[200];
10 int count = 2;
11 int i;
12 for(i = 0; ; i++)
13 {
14 if(count <= N){
15 num[i] = count;
16 N -= count++;
17 }
18 else
19 break;
20 }
21 int len = i;
22 for(i = len - 1; i >= 0 && N > 0; i--)
23 {
24 num[i]++;
25 N--;
26 }
27 for(i = len - 1; i >= 0 && N > 0; i--)
28 {
29 num[i]++;
30 N--;
31 }
32 for(i = 0; i < len - 1; i++)
33 System.out.print(num[i] + " ");
34 System.out.println(num[i]);
35 }
36}
37