soj1746大数贪心.java

来自「一些ACM题目的解答,主要是soj和poj的」· Java 代码 · 共 51 行

JAVA
51
字号
import java.util.*;
import java.math.BigInteger;
public class Main{
    public static void main(String[] args){
        int ncase=1;
        int n;
        Scanner an = new Scanner(System.in);
        while(an.hasNext())
        {
            n = an.nextInt();
            System.out.println("Case "+ ncase++ +":");
            if(n==3)
            {
                System.out.println("2\n1,2");
            }
            else if(n==4)
            {
                System.out.println("3\n1,3");
            }
            else
            {
                int a[] = new int[300];
                int k=(int)(Math.sqrt(2*(n+1)+1.0/4)-1.0/2);
                int i;
                for(i=0;i<=k-2;i++)
                {
                    a[i]=i+2;
                }
                n-=(k+2)*(k-1)/2;
                while(n>0)
                {
                    int j;
                    for(j=k-2;j>=0&&n>0;j--)
                    {
                        a[j]++;
                        n--;
                    }
                }
                BigInteger result = new BigInteger(""+a[0]);
                for(i=1;i<=k-2;i++)
                    result=result.multiply(new BigInteger(""+a[i]));
                System.out.println(result);
                System.out.print(a[0]);
                for(i=1;i<=k-2;i++)
                    System.out.print(","+a[i]);
                System.out.println();
            }
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?