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‘是跨平台的换行符 这样可以避免那个关于\r和\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);
            }

        }

    }
}

刷完这些题之后对这里面最基本的操作就应该没什么问题辣~
时间: 2024-10-20 22:14:56

ACM的java 傻瓜式教学的相关文章

Git添加远程库和从远程库中获取(新手傻瓜式教学)

一.    Git添加远程库 1.在本地新建一个文件夹,在该文件夹使用Git工具,运行$ git init,将该文件夹变为本地Git仓库,同时会生成一个隐藏的.git文件夹. 2.在该文件夹中用NotePad++建立一个xx.txt文件(建立文件即可,不要求什么格式与内容):在Git工具中依次运行 $ git add xx.txt 和  $ git commit -m "描述信息". 3.创建SSH Key.在Git工具中运行 $ ssh-keygen -t rsa -C [email

关于Webpack的的认识及傻瓜式教学

刚学习了Webpack,ememememememememem就赶脚是一个打包工具,将js.css.json.img等等通通打包为最终的文件,最后渲染为一个页面. 也是终于捋清了Webpack的思路,在这里分享一下: 学习Webpack之前首先要知道Webpack是什么?它有什么作用? Webpack是一个前端资源打包工具 Webpack它会将你的项目看作是一个整体,通过一个给定的主文件,寻找到所依赖的所有分支文件,通过lorder处理为浏览器能够识别JavaScript文件 知道它的作用之后我们

Struts学习傻瓜式入门篇

或许有人觉得struts不容易学,似乎里面的一些概念让未接触过的人迷惑,MVC1.MVC2.模式……我写这篇文章是想让从来没有接触过struts的人,能有个简单的入门指引,当然,系统地学习struts是必要的,里面有很多让人心醉的东东,那是后话了. 该案例包括首页,用户登陆.网站向导页面.就这么简单,没有深奥的struts概念,主要靠动手,然后用心体会. WEB Server用tomcat4.到http://jakarta.apache.org下载struts1.1,把zip文 件释放到c:\s

R软件中 文本分析安装包 Rjava 和 Rwordseg 傻瓜式安装方法四部曲

这两天,由于要做一个文本分析的内容,所以搜索了一天R语言中的可以做文本分析的加载包,但是在安装包的过程,真是被虐千百遍,总是安装不成功.特此专门写一篇博文,把整个心塞史畅快的释放一下. --------------------------------------------------------------------------------回归正题,华丽丽的分割线-----------------------------------------------------------------

android 傻瓜式 MultiDex 插件,从此再也不用担心方法数问题!

ndroid-Easy-MultiDex 项目地址:TangXiaoLv/Android-Easy-MultiDex 简介:Android 傻瓜式 MultiDex 插件,从此再也不用担心方法数问题! 注 1:不想看前半部分的话可以直接跳过到最下面配置部分.注 2:本插件是基于DexKnifePlugin 1.5.6优化改造而来,感谢 ceabie 的无私奉献. 填坑之路 坑 1:65536 ,So easy! 原因:Dalvik 的 invoke-kind 指令集中,method refere

NOSDK--关于android傻瓜式的分包设想

一直以来,我总是以“够用就好”为理由,很少再维护过自己的一键打包的项目.最近接触了棱镜的sdk,感觉将apk包上传到棱镜服务器,后台来进行分包这种简单的方式很招人待见. 原理似乎不难,apk即zip压缩文件,解压后需要处理的主要是classes.dex,二进制的AndroidManifest.xml和resources.arsc文件.转载的那篇文章详细的介绍了使用android原生指令编译出apk的过程,从中也可以了解到这些文件的生成方法. nosdk现在已经实现了中间层的代码,不过预先编译各平

傻瓜式操作Nagios图解

傻瓜式操作Nagios 为了节省资源,首先在淘汰的机器上安装一个低版本的OSSIM系统,接下来在WebUI中无需编写任何代码和配置文件便可开启傻瓜化操作Nagios之旅. 1.在左侧菜单中设置网络发现. 开始扫描,发现设备 点击完成后可出现扫描结果,接着选则更新数据库. 2.主机列表 选择一台主机开始设置监控项 查看监控效果 3.列拓扑 列出另一网段更多主机,列出主机状态. 很轻松就完成了Nagios设置,今后增减服务器都可以通过这种图形化方式修改Nagios,非常方便,刚才说了这只是一个低版本

盘点三个网络赚零花钱的小项目,傻瓜式操作

今天,写一篇比较特别的日志,咱们来盘点三个赚零花钱的小项目,都是“傻瓜式”操作. 这几个小项目,虽说赚不了太多的钱,但是却是一个可以锻炼执行力的好方法. 每一个项目操作都非常的简单,边锻炼执行力,边收钱,也是一种不错的体验. 废话不多说,咱们直接进入主题啊! 一,支付宝借条,可赚零花钱,也可赚大钱 支付宝有打借条的功能,本来他们开发这个,只是针对于熟人之前借钱的. 不过,无心插柳柳成荫,没成想,这个功能火的一塌糊涂,完全带火了陌生人之间的借贷业务. 如何利用支付宝借条赚钱? 其实就跟放贷是一样的

傻瓜式操作的三个网络赚零花钱的小项目

今天,写一篇比较特别的日志,咱们来盘点三个赚零花钱的小项目,都是"傻瓜式"操作. 这几个小项目,虽说赚不了太多的钱,但是却是一个可以锻炼执行力的好方法. 每一个项目操作都非常的简单,边锻炼执行力,边收钱,也是一种不错的体验. 废话不多说,咱们直接进入主题啊! 一,支付宝借条,可赚零花钱,也可赚大钱 支付宝有打借条的功能,本来他们开发这个,只是针对于熟人之前借钱的. 不过,无心插柳柳成荫,没成想,这个功能火的一塌糊涂,完全带火了陌生人之间的借贷业务. 如何利用支付宝借条赚钱? 其实就跟放