ブルーブリッジカップ基礎練習02 Java実現


ブルーブリッジカップの入門練習では、他の答えが冗長に書かれているものもあり、Javaの簡潔な方法を十分に利用していないものもあります.ここには私自身が書いたコードを統合し、javaの実現だけを提供しています.問題があれば、検討を歓迎します.
まず、この部分のテーマはvipです.自分で検査環境を構築したいのは私の博文を参考にすることができます:簡単に青い橋の検査システムの本節のコードを実現するのはすべて私が書いたシステム類の基礎の上で実現しました.コピーfunメソッド内部のコードを自分で実行したい場合は、Scannerのオブジェクトを使用する場合は、コードの最初にScannerオブジェクトを作成するコードを1行書けばいいです.
  • 時間変換
  • /*  
               
    
          
                  t,   “::”          。   ,            “0”。  , t=0,     “0:0:0”; t=3661,   “1:1:1”。  
          
            ,     t(0<=t<=86399)。  
          
            ,  “::”         ,     。  
          
    0  
          
    0:0:0  
          
    5436  
          
    1:30:36  
    */
    public class Main10 {
    
        public static void main(String[] args) {
            LT lt=new LT("    ") {
                @Override
                public void fun() {
                    int num=sc.nextInt();
                    int h=0;
                    int m=0;
                    int s=0;
                    h=num/3600; 
                    num=num%3600;
                    m=num/60;
                    s=num%60;
                    System.out.println(h+":"+m+":"+s);
                }
            };
            lt.run();
        }
    
    }
  • 文字列比較
  • /*  
                
    
          
                           (    1 10  ),        
    
        4     :  
      1:         。   Beijing   Hebei  
      2:           ,              (     ),     
    
    Beijing   Beijing  
      3:         ,                           
    
       (    ,       2)。   beijing   BEIjing  
      4:         ,                       。   
    
      Beijing   Nanjing  
                                 ,           
    
    。  
          
          ,           
          
            ,               
          
    BEIjing  
    beiJing  
          
    3  
    */ 
    public class Main11 {
    
        public static void main(String[] args) {
            LT lt=new LT("     ") {
                @Override
                public void fun() {
                    String s1=sc.nextLine();
                    String s2=sc.nextLine();
                    if(s1.length()!=s2.length()){
                        System.out.println(1);
                    }else{
                        if(s1.equals(s2)){
                            System.out.println(2);
                        }else if(s1.equalsIgnoreCase(s2)){
                            System.out.println(3);
                        }else{
                            System.out.println(4);
                        }
                    }
                }
            };
            lt.run();
        }
    
    }
  • 分解素因数
  • /*  
                
    
          
          [a,b]           。  
          
            a,b。  
          
                ,  k=a1*a2*a3...(a1<=a2<=a3...,k       )(      )  
          
    3 10  
          
    3=3  
    4=2*2  
    5=5  
    6=2*3  
    7=7  
    8=2*2*2  
    9=3*3  
    10=2*5  
        
             ,     。  
             
      2<=a<=b<=10000  
    */   
    public class Main12 {
    
        public static void main(String[] args) {
            LT lt=new LT("     ") {
                @Override
                public void fun() {
                    int a=sc.nextInt();
                    int b=sc.nextInt();
                    for(int i=a;i<=b;i++){
                        System.out.print(i+"=");
                        int temp=i;
                        while(temp!=1){
                            for(int j=2;j<=temp;j++){
                                if(temp%j==0){
                                    temp=temp/j;
                                    if(temp!=1){
                                        System.out.print(j+"*");
                                    }else{
                                        System.out.print(j);
                                    }
                                    break;
                                }
                            }
                        } 
                        System.out.println();
                    }
                }
            };
            lt.run();
        }
    
    }
  • 行列乗算bug点:行列のゼロ乗は単位行列なのか、それともしっかりした数学の基礎が必要なのか.2 D配列レプリケーションについては、配列レプリケーションの方法
  • について参照してください.
    /*  
               
    
          
          N   A,  A M  (M     )  
        :  
      A =  
      1 2  
      3 4  
      A 2    
      7 10  
      15 22  
          
               N、M(1<=N<=30, 0<=M<=5),    A           
         N ,  N       10     ,    A    
          
         N ,  N   ,  A M        。               
          
    2 2  
    1 2  
    3 4  
          
    7 10  
    15 22  
    */
    public class Main14 {
        public static void main(String[] args) {
            LT lt = new LT("    ") {
    
                @Override
                public void fun() {
                    int n = sc.nextInt();
                    int m = sc.nextInt();
                    int[][] a = new int[n][n];
                    for (int i = 0; i < n; i++) {
                        for (int j = 0; j < n; j++) {
                            a[i][j] = sc.nextInt();
                        }
                    }
                    int[][] t = new int[n][n];
                    int[][] b = new int[n][n];
                    for (int i = 0; i < a.length; i++) {
                        b[i] = a[i].clone();
                    }
                    if (m == 0) {
                        for (int i = 0; i < n; i++) {
                            for (int j = 0; j < n; j++) {
                                if (i == j) {
                                    System.out.println(1 + " ");
                                } else {
                                    System.out.println(0 + " ");
                                }
                            }
                            System.out.println();
                        }
    
                    } else {
    
                        for (int k = 1; k < m; k++) {
                            for (int i = 0; i < n; i++) {
                                for (int j = 0; j < n; j++) {
                                    int sum = 0;
                                    for (int l = 0; l < n; l++) {
                                        sum += b[i][l] * a[l][j];
                                    }
                                    t[i][j] = sum;
                                }
                            }
                            for (int i = 0; i < a.length; i++) {
                                b[i] = t[i].clone();
                            }
                        }
                        for (int[] c : b) {
                            for (int d : c) {
                                System.out.print(d + " ");
                            }
                            System.out.println();
                        }
                    }
                }
            };
            lt.run();
        }
    }
  • 矩形面積交
  • /*  
               
    
          
              ,             X  Y 。      ,    
    
                 ,               。  
          
             ,        。  
          ,              ,                  
    
    10^7     。  
          
               ,     ,        。  
          
    1 1 3 3  
    2 2 4 4  
          
    1.00  
    */  
    import java.util.Arrays;
    public class Main13 {
    
        public static void main(String[] args) {
            LT lt=new LT("     ") {
                @Override
                public void fun() {
                    double ax=sc.nextDouble();
                    double ay=sc.nextDouble();
                    double bx=sc.nextDouble();
                    double by=sc.nextDouble();
                    double cx=sc.nextDouble();
                    double cy=sc.nextDouble();
                    double dx=sc.nextDouble();
                    double dy=sc.nextDouble();
                    if(max(ax,bx)out.println("0.00");
                    }else{
                        double []a={ax,bx,cx,dx};
                        double []b={ay,by,cy,dy};
                        Arrays.sort(a);
                        Arrays.sort(b);
                        double sum=(a[2]-a[1])*(b[2]-b[1]);
                        System.out.printf("%.2f",sum);
                    }
                }
                public double max(double a,double b){
                    return a>b?a:b;
                }
                public double min(double a,double b){
                    return a
  • 完璧な代価注:本題はあまりにも頭を焼いて、私が探している対応するC言語の解決策、すり終わった後にコードの中で注釈を書いて、問題があったら私に
  • /*  
                
    
          
         ,         ,                。        
    
           。       ,        ,                
    
               。  
            :           
        mamad  
            ad : mamda  
            md : madma  
            ma : madam (  !  !)  
          
              N,            (N <= 8000)  
               ,   N.         
          
          ,         。  
          Impossible  
          
    5  
    mamad  
          
    3  
    */
    public class Main15 {
    
        public static void main(String[] args) {
            LT lt = new LT("     ") {
                @Override
                public void fun() {
                    int[] b = new int[26];//   
                    int n = sc.nextInt();
                    char x = '0';//             
                    sc.nextLine();//           ,         
                    String str = sc.nextLine();
                    char[] s = str.toCharArray();
                    /*
                     *    ,  26             ,                ,       
                     */
                    for (int i = 0; i < n; i++) {
                        int j = s[i] - 'a';
                        b[j]++;
                    }
                    int k = 0;//              
                    for (int j = 0; j < 26; j++) {
                        if (b[j] % 2 != 0) {
                            k++;
                            x = (char) (j + 'a');//  C          
                        }
                    }
                    if (k >= 2)
                        System.out.println("Impossible");
                    else
                        System.out.println(changes(s, x, n));
                }
    
                int changes(char s[], char x, int n) {
                    int i, change = 0, j, k;
                    //    for           
                    for (i = 0; i < n / 2; i++) {
                        //             
                        if (s[i] == x) {
                            /*   for    ,
                             *                     ,
                             *                     ,
                             *                            i 
                             *   i              
                             */
                            for (j = i; j < n - i - 1; j++)
                                if (s[n - i - 1] == s[j])
                                    break;
                            change += j - i;
                            for (k = j; k > i; k--)
                                s[k] = s[k - 1];
                            s[i] = s[n - i - 1];
                        }
                        //     
                        else {
                            /*
                             *                    
                             *                                 
                             *             i   
                             */
                            for (j = n - i - 1; j >= i; j--)
                                if (s[i] == s[j])
                                    break;
                            change += n - i - 1 - j;
                            for (k = j; k < n - i - 1; k++)
                                s[k] = s[k + 1];
                            s[n - i - 1] = s[i];
                        }
                    }
                    return change;
                }
            };
            lt.run();
        }
    
    }
  • 数の読み方私のアルゴリズムは長いですが、分かりやすいです.考えを言えば、数字を億級、万級、個級に分けて、4つの数字ごとに1級に分けて、この4つの数字の読み方は同じであることがわかります.(printメソッド)しかし、タイトルの要求に応じて、最初に読んだのは10億に出会ったら、10億ではなく10億に読むが、後のレベルは、現れたら1を増やさなければならない.そこで、最初の読み方を解決するための関数(oneメソッド)を書きました.特に、
  • //C    
    #include  
    #include  
    int main()  
    {  
        char a[100];int i,j,k,l;  
        char b[20][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};  
        char c[20][10]={"","","shi","bai","qian","wan","shi","bai","qian","yi","shi"};  
        gets(a);  
        l=strlen(a);  
        for(i=0;i48;  
            if(j==0){if(i1)if(a[i+1]!=48)printf("%s ",b[j]);}  
            else   
            if((l-i==2||l-i==6||l-i==10)&&j==1)printf("%s ",c[l-i]);  
            else if(a[i-1]==48&&j==1)printf("%s ",c[l-i]);  
            else printf("%s %s ",b[j],c[l-i]);  
        }  
        printf("
    "
    ); return 0; }

    上記の方法は、タイトルの要件を満たしていない「例えば「10010」を「yi wan ling yi shi」と読み、この方法で読むと1万10、1がありません.
    /*  
               
    
          
      Tom                   ,           :     
    
                ,   0    ,    ,   ,    。  
         ,       1234567009        ,              
    
       。  
        ,          ,      12 3456 7009 ,        :  
                       
                
      shi er yi san qian si bai wu shi liu wan qi qian ling jiu  
                   。  
                     :          ,            
    
              ,               。  
                ,   “10010”  “yi wan ling yi shi”   “yi wan   
    
    ling shi”,“100000”  “shi wan”   “yi shi wan”,“2000”  “er qian”   
    
      “liang qian”。  
          
            ,       2,000,000,000。  
          
                ,           ,         。  
          
    1234567009  
          
    shi er yi san qian si bai wu shi liu wan qi qian ling jiu  
    */
    
    public class Main17 {
    
        public static void main(String[] args) {
            LT lt = new LT("    ") {
    
                String[] b = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu", "shi" };
    
                @Override
                public void fun() {
    
                    int num = sc.nextInt();
                    if (num >= 100000000) {
                        one(num / 100000000, "yi");
                        print(num % 100000000 / 10000, "wan");
                        print(num % 10000, "");
                    } else if (num >= 10000) {
                        one(num % 100000000 / 10000, "wan");
                        print(num % 10000, "");
                    } else {
                        one(num % 10000, "");
                    }
                }
    
                public void one(int n, String str) {
                    String c[] = { "", "shi ", "bai ", "qian " };
                    int t[] = new int[4];
                    t[0] = n / 1000;
                    t[1] = n % 1000 / 100;
                    t[2] = n % 100 / 10;
                    t[3] = n % 10;
                    int i = 0;
                    while (t[i++] == 0)
                        ;
                    i--;
                    for (; i < 4; i++) {
                        if (t[i] == 0) {
                            if (i != 3 && t[i + 1] != 0) {
                                System.out.print(b[t[i]] + " ");
                            }
                        } else if (t[i] == 1 && i == 2) {
                            System.out.print(c[4 - i - 1]);
                        } else {
                            System.out.print(b[t[i]] + " ");
                            System.out.print(c[4 - i - 1]);
                        }
    
                    }
    
                    System.out.print(str + " ");
                }
    
                public void print(int n, String str) {
                    if (n == 0) {
                        return;
                    }
                    String c[] = { "", "shi ", "bai ", "qian " };
                    int t[] = new int[4];
                    t[0] = n / 1000;
                    t[1] = n % 1000 / 100;
                    t[2] = n % 100 / 10;
                    t[3] = n % 10;
                    int i = 0;
    
                    for (; i < 4; i++) {
                        if (t[i] == 0) {
                            if (i != 3 && t[i + 1] != 0) {
                                System.out.print(b[t[i]] + " ");
                            }
                        } else {
                            System.out.print(b[t[i]] + " ");
                            System.out.print(c[4 - i - 1]);
                        }
    
                    }
    
                    System.out.print(str + " ");
    
                }
            };
            lt.run();
        }
    
    }
  • Sineの舞
  • /*  
         Sine    
    
          
        FJ              ,FJ         ,          
    
          。            “Sine  ”   ,    ,       
    
         。  
           
      An=sin(1–sin(2+sin(3–sin(4+...sin(n))...)  
      Sn=(...(A1+n)A2+n-1)A3+...+2)An+1  
      FJ       Sn  ,    FJ   Sn      ,        。  
          
           :N<201。  
          
               Sn,        。               、   
    
      。  
          
    3  
          
    ((sin(1)+3)sin(1–sin(2))+2)sin(1–sin(2+sin(3)))+1  
    */
    
    public class Main18 {
    
        public static void main(String[] args) {
            LT lt = new LT("Sine  ") {
    
                @Override
                public void fun() {
                    printS(sc.nextInt());
    
                }
    
                public void printA(int n) {
                    for (int i = 1; i <= n; i++) {
                        System.out.print("sin(" + i);
                        if (i == n) {
                            break;
                        }
                        if (i % 2 != 0) {
                            System.out.print("-");
                        } else {
                            System.out.print("+");
                        }
                    }
                    for (int i = 0; i < n; i++) {
                        System.out.print(")");
                    }
                }
    
                public void printS(int n) {
                    for (int i = 1; i < n; i++) {
                        System.out.print("(");
                    }
                    for (int i = 1; i <= n; i++) {
                        printA(i);
                        System.out.print("+" + (n - i + 1));
                        if (i != n) {
                            System.out.print(")");
                        }
                    }
                }
            };
            lt.run();
        }
    
    }
  • FJの文字列という問題は本当に再帰的な魅力を感じさせ、同じくPrintStreamのprinfメソッドを使用しました.
  • /*  
         FJ      
    
          
      FJ             :  
      A1 = “A”  
      A2 = “ABA”  
      A3 = “ABACABA”  
      A4 = “ABACABADABACABA”  
      … …  
                      AN ?  
          
           :N ≤ 26。  
          
               AN,        。               、  
    
       。  
          
    3  
          
    ABACABA  
    */  
    
    public class Main19 {
    
        public static void main(String[] args) {
            LT lt = new LT("FJ    ") {
    
                @Override
                public void fun() {
                    f(sc.nextInt());
                }
                public void f(int a)  
                {  
                    if(a==1)
                        System.out.printf("%c",'A');  
                    else   
                    {
                        f(a-1);  
                        System.out.printf("%c",a-1+'A');  
                        f(a-1);  
                    }
                }
    
            };
            lt.run();
        }
    
    }
  • チップテストは不良品よりも正品が多いため、検出データの1つ以上がこの製品が正品であることを示しています.列ごとに1の個数を見ればいいです.
  • /*  
               
    
          
       n(2≤n≤20)   ,    ,          。  
                    。           ,            
    
         。            ,              (       
    
                )。  
                 ,         。  
          
                  n,      。  
           n+1  n*n    ,  n   。        0 1,  n   
    
       i  j (1≤i, j≤n)       i      j           ,1  
    
       ,0   ,i=j    1(               。         
    
        )。  
          
                          
          
    3  
    1 0 1  
    0 1 0  
    1 0 1  
          
    1 3  
    */  
    
    public class Main20 {
    
        public static void main(String[] args) {
            LT lt = new LT("    ") {
    
                @Override
                public void fun() {
                    int n=sc.nextInt();
                    int [][]a=new int[n][n];
                    for(int i=0;ifor(int j=0;jfor(int i=0;iint sum=0;
                        for(int j=0;jif(2*sum>n){
                            System.out.print(i+1+" ");
                        }
                    }
                }
            };
            lt.run();
        }
    }
  • 亀兎競走予測
  • /*  
                 
    
          
                        ,      ,                 ——    。                  
          ,        ,                。   ,         ,           ——     ,    
          ,                t    ,         s 。       ,t,s       ,           ——          。  
                ,           ,                          ——     v1(        v1 ),     v2,       t,s ,       l——          。      ,                ,       ——            ——    ,       ,            v1,v2,t,s,l,         。  
          
            ,             v1,v2,t,s,l,  (v1,v2<=100;t<=300;s<=10;l<=10000  v1,v2    )  
          
            ,         ——      “T” “R” “D”,        ,    ,          。  
                ,     (      )          (  )。  
          
    10 5 5 2 20  
          
    D  
    4  
          
    10 5 5 1 20  
          
    R  
    3  
          
    10 5 5 3 20  
          
    T  
    4   
    */  
    
    public class Main21 {
    
        public static void main(String[] args) {
            LT lt = new LT("      ") {
    
                @Override
                public void fun() {
                    int v1=sc.nextInt();
                    int v2=sc.nextInt();
                    int t=sc.nextInt();
                    int s=sc.nextInt();
                    int l=sc.nextInt();
                    int l1=0,l2=0;
                    int i=0;
                    while(true){
                        i++;
                        l1+=v1;
                        l2+=v2;
                        if(l1==l||l2==l){
                            break;
                        }
                        if(l1-l2>=t){
                            l1-=s*v1;
                        }
                    }
                    System.out.println((l1==l?l2==l?"D":"R":"T")+"
    "
    +i); } }; lt.run(); } }
  • 回形取数
  • /*  
                 
    
          
                   ,               ,   90 。          ,    。  
          
                 200    m, n,        。   m   n   ,      。  
          
            , mn  ,              。          ,          。  
          
    3 3  
    1 2 3  
    4 5 6  
    7 8 9  
          
    1 4 7 8 9 6 3 2 5  
          
    3 2  
    1 2  
    3 4  
    5 6  
          
    1 3 5 6 4 2  
    */  
    
    public class Main22 {
    
        public static void main(String[] args) {
            LT lt = new LT("    ") {
    
                @Override
                public void fun() {
                    int m=sc.nextInt();
                    int n=sc.nextInt();
                    int [][]a=new int [m][n];
                    for(int i=0;ifor(int j=0;jint times=0;
                    int x=0,y=0;
                    while(times!=n*m){
                        for(;x1;x++){
                            System.out.print(a[x][y]+" ");
                            a[x][y]=-1;
                            times++;
                        }
                        x--;
                        y++;
                        for(;y1;y++){
                            System.out.print(a[x][y]+" ");
                            a[x][y]=-1;
                            times++;
                        }
                        y--;
                        x--;
                        for(;x>=0&&a[x][y]!=-1;x--){
                            System.out.print(a[x][y]+" ");
                            a[x][y]=-1;
                            times++;
                        }
                        x++;
                        y--;
                        for(;y>=0&&a[x][y]!=-1;y--){
                            System.out.print(a[x][y]+" ");
                            a[x][y]=-1;
                            times++;
                        }
                        y++;
                        x++;
                    }
                }
            };
            lt.run();
        }
    }
  • 時報アシスタント
  • /*  
               
    
          
             ,            。  
          h  m  ,       ,         :  
        m 0,      ,    “o'clock”, 3:00  “three o'clock”。  
        m  0,      ,       , 5:30  “five thirty”。  
                       ,  0~20  :  
      0:zero, 1: one, 2:two, 3:three, 4:four, 5:five, 6:six, 7:seven, 8:eight, 9:nine, 10:ten, 11:eleven, 12:twelve, 13:thirteen, 14:fourteen, 15:fifteen, 16:sixteen, 17:seventeen, 18:eighteen, 19:nineteen, 20:twenty。  
      30  thirty,40  forty,50  fifty。  
          20  60   ,       ,        。 31   30  1   ,  “thirty one”。  
            21:54  “twenty one fifty four”,9:07  “nine seven”,0:15  “zero fifteen”。  
          
                h m,        。          0。h  24,m  60。  
          
               。  
          
    0 15  
          
    zero fifteen  
    */  
    
    public class Main23 {
    
        public static void main(String[] args) {
            LT lt = new LT("    ") {
                String [] a={"zero" ,"one" ,"two" ,"three" ,"four" ,"five" ,"six" ,"seven" ,"eight" ,"nine" ,"ten" ,
                        "eleven" ,"twelve" ,"thirteen" ,"fourteen" ,"fifteen" ,"sixteen" ,"seventeen" ,"eighteen" ,"nineteen" ,"twenty"};
                String [] b={"twenty","thirty","forty","fifty"};
                @Override
                public void fun() {
                    int h=sc.nextInt();
                    int m=sc.nextInt();
                    change(h);
                    if(m==0){
                        System.out.println(" o'clock");
                    }else{
                        change(m);
                    }
                }
                public void change(int s){
                    if(s<=20){
                        System.out.print(a[s]);
                    }else if(s%10==0){
                        System.out.print(b[s/10-2]);
                    }else{
                        System.out.print(b[s/10-2]+" "+a[s%10]);
                    }
                }
            };
            lt.run();
        }
    }
  • 2 n皇后问题白黒皇后は2つの皇后问题とすることができて、先方白皇后は更に黒皇后を放します.
  • /*  
         2n      
    
          
          n*n   ,             。         n      
    
     n    ,               、           ,      
    
              、           。         ?n    8。  
          
                 n,       。  
         n ,  n 0 1   ,       1,            ,  
    
           0,             。  
          
            ,          。  
          
    4  
    1 1 1 1  
    1 1 1 1  
    1 1 1 1  
    1 1 1 1  
          
    2  
          
    4  
    1 0 1 1  
    1 1 1 1  
    1 1 1 1  
    1 1 1 1  
          
    0  
    */
    
    public class Main24 {
    
        public static void main(String[] args) {
            LT lt = new LT("2n    ") {
                int bqueen[];//    
                int wqueen[];//    
                int chessboard[][];// 1:   0:   
                int count;
                int n;
    
                public void BlackQueen(int k){
                    int i;
                    int j;
                    for (i = 0; i < k - 1; i++) {
                        int judge = bqueen[i] - bqueen[k - 1];
                        if (judge == 0 || Math.abs(k - 1 - i) == Math.abs(judge))
                            return;
                    }
                    if (k == n) {
                        count++;
                        return;
                    }
                    for (j = 0; j < n; j++) {
                        if (j != wqueen[k] && chessboard[k][j] == 1) {
                            bqueen[k] = j;
                            BlackQueen(k + 1);
                        }
                    }
                }
    
                void WhiteQueen(int k) {
                    int i;
                    int j;
                    for (i = 0; i < k - 1; i++) {
                        int judge = wqueen[i] - wqueen[k - 1];
                        if (judge == 0 || Math.abs(k - 1 - i) == Math.abs(judge))
                            return;
                    }
                    if (k == n) {
                        BlackQueen(0);
                        return;
                    }
                    for (j = 0; j < n; j++) {
                        if (chessboard[k][j] == 1) {
                            wqueen[k] = j;
                            WhiteQueen(k + 1);
                        }
                    }
                }
    
                public void fun() {
                    int i;
                    int j;
                    count=0;
                    n = sc.nextInt();
                    chessboard = new int[n][n];
                    bqueen =new int[n];
                    wqueen=new int[n];
                    for (i = 0; i < n; i++)
                        for (j = 0; j < n; j++)
                            chessboard[i][j] = sc.nextInt();
                    WhiteQueen(0);
                    System.out.print(count);
                }
            };
            lt.run();
        }
    }
  • Huffumanツリー
  • /*  
         Huffuman    
    
          
      Huffman            。   ,     Huffman      。  
           {pi}={p0, p1, …, pn-1},      Huffman      :  
      1.   {pi}       ,  pa pb, pa pb {pi}    ,        
    
        {pi} 。         pa + pb。  
      2.     1,  {pi}       。  
               ,        ,      Huffman     。  
          :         ,            Huffman     。  
    
        ,    {pi}={5, 3, 8, 2, 9},Huffman        :  
      1.   {5, 3, 8, 2, 9}       ,   2 3, {pi}        5  ,  
    
      {5, 8, 9, 5},   5。  
      2.   {5, 8, 9, 5}       ,   5 5, {pi}        10  ,   
    
     {8, 9, 10},   10。  
      3.   {8, 9, 10}       ,   8 9, {pi}        17  ,   
    
     {10, 17},   17。  
      4.   {10, 17}       ,   10 17, {pi}        27  ,   
    
     {27},   27。  
      5.   ,         27,      ,    5+10+17+27=59。  
          
                   n(n<=100)。  
          n    ,  p0, p1, …, pn-1,      1000。  
          
              Huffman     。  
          
    5 3 8 2 9  
          
    */
    
    public class Main25 {
    
        public static void main(String[] args) {
            LT lt = new LT("Huffuman ") {
                int a[] = new int[100];
    
                public void fun() {
                    int n =  sc.nextInt();
    
                    for(int i=0;iint sum = 0;
                    for (int i = 0; i < n - 1; i++) {
                        sort(i, n);
                        a[i+1]+=a[i];
                        sum+=a[i+1];
    //                  System.out.println(sum);
                    }
                    System.out.println(sum);
                }
    
                public void sort(int start, int n) {
                    for (int i = start; i < n; i++) {
                        for (int j = i+1; j < n ; j++) {
                            if (a[j] < a[i]) {
                                int temp = a[j];
                                a[j] = a[i];
                                a[i] = temp;
                            }
                        }
                    }
                }
            };
            lt.run();
        }
    }
  • 高精度加算私は最高位が10より大きくなることを恐れてわざわざn配列に空を残したが、実は余計だった.
  • /*  
                
    
          
            a b,         。a b    100 。  
          
        a b    ,                     。        
    
    ,         。  
            A,A[0]    a   ,A[1]    a   ,    。      
    
         B   b。  
        c = a + b   ,   A[0] B[0]  ,       ,    (     
    
       )  r,        C[0], C[0]  (A[0]+B[0])%10。    A[1] B[1]  
    
      ,            r    , C[1]   A[1]、B[1] r     .   
    
           ,           r ,      C[1] 。    ,     
    
     C    。  
         C    。  
          
            ,          a,          b。         
    
     100 ,         0。  
          
          ,  a + b  。  
          
    20100122201001221234567890  
    2010012220100122  
          
    20100122203011233454668012  
    */  
    
    public class Main26 {
    
        public static void main(String[] args) {
            LT lt = new LT("     ") {
    
    
                public void fun() {
                    String src=sc.nextLine();
                    char[]a=src.toCharArray();
                    src=sc.nextLine();
                    char[]b=src.toCharArray();
                    if(a.length>b.length){
                        caculate(a,b);
                    }else{
                        caculate(b,a);
                    }
                }
                public void caculate(char [] l,char []s){
    
                    int ll=l.length;
                    int sl=s.length;
                    int n[]=new int [ll+1];
                    int i;
                    for(i = 0;i1]=(l[ll-i-1]+s[sl-i-1]-48-48+n[ll-i])/10;
                        n[ll-i]=(l[ll-i-1]+s[sl-i-1]-48-48+n[ll-i])%10;
                    }
                    for(;i1]=(l[ll-i-1]-48+n[ll-i])/10;
                        n[ll-i]=(l[ll-i-1]-48+n[ll-i])%10;
                    }
                    i=0;
                    while(n[i++]==0);
                    for(i=i-1;i1;i++){
                        System.out.print(n[i]);
                    }
                }
            };
            lt.run();
        }
    }
  • 階乗計算2600個の長さが満たされています.そうしないと、
  • が足りません.
    /*  
               
    
          
             n,  n!  。  
        n!=1*2*3*…*n。  
          
      n!    ,              ,            。      A        a,A[0]  a   ,A[1]  a   ,    。  
       a      k     A         k,          。  
         a  1,   2, 3,   n ,    n!  。  
          
               n,n<=1000。  
          
        n!    。  
          
    10  
          
    3628800  
    */  
    
    public class Main27 {
    
        public static void main(String[] args) {
            LT lt = new LT("    ") {
    
    
                public void fun() {
                    int a[]=new int[2600];
                    int n=sc.nextInt();
                    a[0] = 1;  
                    for(int i=2;i<=n;i++){
                        int extra=0;
                        for(int j=0;jint temp=a[j]*i+extra;
                            extra=temp/10;
                            a[j]=temp%10;
                        }
                    }
                    int i=a.length;
                   while(a[--i]==0);
                  for(;i>=0;i--){
                      System.out.print(a[i]);
                  }
                }
    
    
    
            };
            lt.run();
        }
    }