poj1032Parliament

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

你可能感兴趣的:(poj1032Parliament)