zoukankan      html  css  js  c++  java
  • ACM的java 傻瓜式教学

    关于eclipse的配置 我感觉我讲不清【逃

    开始

    从配好之后讲起

    文件名命名为Main.java【接下来几行解释为什么要起这个名字

    注意第七行那里(为了方便复制我没有加行号)的类的名字必须与文件名相同

    但是你会看到各大oj的FAQ上有一些要求

    比如hdu上有这个

    然后貌似我今年去鞍山打区域赛的时候也有这个要求 所以就不要倔吧 就起这个名

    “框架”

    然后大概所谓“框架”就是这样

    import java.util.*;
    import java.io.*;
    import java.math.*;
    import java.text.*;
    
    
    public class Main 
    {
    public static void main(String[] args) { Scanner cin = new Scanner(new BufferedInputStream(System .in)); /*program*/ } }

    eclipse非常方便就是如果你少import了什么库它会给你提示或者自动给你加

    所以再也没有之前刚开始学c学c++时 调用函数却闹不清头文件的烦恼

    之后默认的话是F11就编译运行了~

    函数

    列了几个我个人觉得比较实用的函数:

    BigDecimal add(BigDecimal augend) :加法

    BigDecimal subtract(BigDecimal subtrahend) :减法

    BigDecimal divide(BigDecimal divisor) :除法  

    BigDecimal pow(int n) :乘幂

    BigDecimal multiply(BigDecimal multiplicand) :乘法

    int compareTo(BigDecimal number):比较两个数 比如a.compareTo(b) a<b返回-1【<0】 a==b返回0 a>b返回1【>0】 很好记

    public String substring(int beginIndex):相当于删掉字符串的前几位

    public String substring(int beginIndex,int length):相当于取字符串中间一段 (注意第二个参数是长度而不是截止位置的下标)

    BigDecimal stripTrailingZeros(BigDecimal number):对于一个高精度小数 从表示形式上移除所有尾部的无用零

    String toPlainString(BigDecimal number):高精度小数转字符串(进而可以方便地使用字符串处理函数)

    实例

    讲多无谓 上几个例子自己写写就懂了

    hdu1042 大数阶乘 

    import java.util.*;
    import java.io.*;
    import java.math.BigInteger;
    import java.text.*;
    
    
    public class Main {
        public static void main(String[] args)
        {    
            Scanner cin = new Scanner(new BufferedInputStream(System .in));
            
            int n;
            while(cin.hasNextInt())    //类似于以前判EOF的方式 
            {
                int a = cin.nextInt();  //整数读入方法
                
                if(a == 0)         //特判0! = 1
                {
                    System.out.println("1");
                    continue;
                }
                
                BigInteger ans = BigInteger.valueOf(a);  //valueOf()可以把数转成各个类对应的类型
                
                for(int i = 2; i < a; i++)
                {
                    ans = ans.multiply(BigInteger.valueOf(i));              
                }
                
                System.out.println(ans);
            }
            
    
        }
    }

    个人觉得就像c++中类的成员函数的各种调用

    hdu 2054

    import java.util.*;
    import java.io.*;
    import java.math.*;
    import java.text.*;
    
    
    public class Main {
        public static void main(String[] args)
        {    
            Scanner cin = new Scanner(new BufferedInputStream(System .in));
            
            BigDecimal a, b;
            while(cin.hasNext())
            {
                a = cin.nextBigDecimal();
                b = cin.nextBigDecimal();
                
                if(a.compareTo(b) == 0)
                    System.out.println("YES");
                else
                    System.out.println("NO");
                
            }
            
    
        }
    }

    hdu 1047 

    import java.util.*;
    import java.io.*;
    import java.math.*;
    import java.text.*;
    
    
    public class Main {
        public static void main(String[] args)
        {    
            Scanner cin = new Scanner(new BufferedInputStream(System .in));
            
            int T;
            T = cin.nextInt();
            BigInteger a, b;
            BigInteger zero = new BigInteger("0");
            for(int i = 0; i < T; i++)  //本来我习惯写while(T--)的 不过这里面好像不行
            {
                a = zero;
                while(true)
                {
                    b = cin.nextBigInteger();
                    if(b.compareTo(zero) == 0)
                        break;
                    a = a.add(b);
                }
                System.out.println(a);
                if(i < T-1)
                    System.out.printf("%n");//这里是特地这么写的 ‘%n‘是跨平台的换行符 这样可以避免那个关于
    和
    的纠结问题
                           //也可以写成System.out.println("");
                
                
            }
            
    
        }
    }

    hdu 1063

    import java.util.*;
    import java.io.*;
    import java.math.*;
    import java.text.*;
    
    
    public class Main {
        public static void main(String[] args)
        {    
            Scanner cin = new Scanner(new BufferedInputStream(System .in));
            
            
            
            while(cin.hasNextBigDecimal())
            {
                BigDecimal ans = new BigDecimal("1");
                BigDecimal a;
                int n;
                BigDecimal one = new BigDecimal("1");
                String anss;
                
                a = cin.nextBigDecimal();
                n = cin.nextInt();
                
                for(int i = 0; i < n; i++)
                {
                    ans = ans.multiply(a);
                }
                
                ans = ans.stripTrailingZeros();
                anss = ans.toPlainString();
                
                if(ans.compareTo(one) < 0)
                {
                    anss = anss.substring(1);
                    System.out.println(anss);
                }                
                else
                {
                    System.out.println(anss);
                }
            }
    
        }
    }
    关于stripTrailingZeros() 
    举个例子 不加这句话的话 如果运算1.1 + 2.9 结果会输出4.0
    加这个函数之后它就变成4了
    这就是这个函数的作用

    关于小数的最简形式
    0.1 需要改成 .1
    虽然觉得怪怪的 不过在计算器上输入“.1”它确实会识别出来
    下面还有一道类似的题目


    hdu 1316
    import java.util.*;
    import java.io.*;
    import java.math.*;
    import java.text.*;
    
    
    public class Main {
        public static void main(String[] args)
        {    
            Scanner cin = new Scanner(new BufferedInputStream(System .in));
            
            BigInteger fibo[] = new BigInteger[1010];
            fibo[0] = new BigInteger("1");
            fibo[1] = new BigInteger("2");
            for(int i = 2; i < 1000; i++)
                fibo[i] = fibo[i-1].add(fibo[i-2]);
            
            BigInteger a, b;
            BigInteger zero = new BigInteger("0");
            while(true)
            {
                a = cin.nextBigInteger();
                b = cin.nextBigInteger();
                
                if(b.compareTo(zero) == 0)
                    break;
                
                int ans = 0;
                boolean flag = false;  //这里面是boolean
                for(int i = 0; i < 1000; i++)
                {
                    if(!flag && fibo[i].compareTo(a) >= 0)
                        flag = true;
                    
                    if(flag && fibo[i].compareTo(b) > 0)
                        break;
                    
                    if(flag)
                        ans++;                          
                }
                
                System.out.println(ans);
                
            }
            
        }
    }

    这个程序我也是模仿别人的写法的

    然后我就特别好奇数组那里为毛两次new

    然后抱“老头”(一个道骨仙风的世外高人)大腿之后才弄明白

    对于第一个new:BigInteger fibo[] = new BigInteger[1010];

    可以理解为C++中的 int *fibo[] 即,java中那种写法它实际上只是为1010个指针分配的空间 而不像c++中 int fibo[1010] 就已经为数据开辟出一片空间了

    所以第二个new:fibo[0] = new BigInteger("1");

    之所以可以这么写就比较自然了吧 

    当然也可以不这么写 

    fibo[0] = BigInteger.valueOf(1); 这种写法也是阔仪滴

     

    hdu 1715

    import java.util.*;
    import java.io.*;
    import java.math.*;
    import java.text.*;
    
    
    public class Main {
        public static void main(String[] args)
        {    
            Scanner cin = new Scanner(new BufferedInputStream(System .in));
            
            BigInteger fibo[] = new BigInteger[1010];
            fibo[1] = new BigInteger("1");
            fibo[2] = new BigInteger("1");
            for(int i = 3; i < 1010; i++)
                fibo[i] = fibo[i-1].add(fibo[i-2]);
            
            int T;
            T = cin.nextInt();
            for(int i = 0; i < T; i++)
            {
                int n;
                n = cin.nextInt();
                System.out.println(fibo[n]);            
            }        
            
        }
    }


    hdu 1753
    import java.util.*;
    import java.io.*;
    import java.math.*;
    import java.text.*;
    
    
    public class Main {
        public static void main(String[] args)
        {    
            Scanner cin = new Scanner(new BufferedInputStream(System .in));
            
            BigDecimal a, b;
            
            while(cin.hasNextBigDecimal())
            {
                a = cin.nextBigDecimal();
                b = cin.nextBigDecimal();
                
                BigDecimal ans = a.add(b);
                ans = ans.stripTrailingZeros();
                
                String anss = ans.toPlainString();
                
                BigDecimal one = new BigDecimal("1");
                if(ans.compareTo(one) < 0)
                {
                    anss = anss.substring(1);
                    System.out.println(anss);
                }
                else
                {
                    System.out.println(anss);
                }
                
            }
                
           
                
            
            
        }
    }


    刷完这些题之后对这里面最基本的操作就应该没什么问题辣~
  • 相关阅读:
    阿里巴巴java开发手册学习
    策略模式
    windows常用技巧
    nginx学习
    Tomcat入门
    ThreadPoolTaskExecutor的简单使用
    linux服务器测试性能
    HAProxy1.5.x tcp example
    Haproxy开启日志
    Fix rpmdb: Thread died in Berkeley DB library
  • 原文地址:https://www.cnblogs.com/dishu/p/4143822.html
Copyright © 2011-2022 走看看