Java在ACM中的应用

Chapter I. 

Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点: 

(1) 最明显的好处是,学会Java,可以参加Java Challenge   :) 
(2) 对于熟悉C/C++的程序员来说,Java 并不难学,找本书,一两周业余时间就可以搞定了。当然,这里只是指一般编程,想熟悉所有的Java库还是需要些时间的。 
事实上,Java 只相当于C++的一个改进版,所有的语法都几乎是C++的,很少有变动。 
(3) 在一般比赛中,Java程序会有额外的时间和空间,而实际上经过实验,在执行计算密集任务的时候Java并不比C/C++慢多少,只是IO操作较慢而已。 
(4) Java 简单而功能强大,有些东西用Java实现起来更为方便,比如高精度。 
(5) 用Java不易犯细微的错误,比如C/C++中的指针, “if (n = m) ... ” 等 
(6) 目前来看Eclipse已成基本配置,写Java程序反而比C/C++更方便调试。在具体竞赛时也算多一种选择。 
(7) 学会Java对以后工作有好处。现在国外很多地方会Java的人比会C/C++的人多。 
(8) 会Java可以使你看起来更像偶蹄类动物(牛)     hoho~ 


Chapter II. 

下面说一下ACM-ICPC队员初用Java编程所遇到的一些问题: 

1. 基本输入输出: 

(1) 
JDK 1.5.0 新增的Scanner类为输入提供了良好的基础,简直就是为ACM-ICPC而设的。 

一般用法为: 

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


当然也可以直接 Scanner cin = new Scanner(System.in); 
只是加Buffer可能会快一些 

(2) 
读一个整数:   int n = cin.nextInt();         相当于   scanf("%d", &n);   或 cin >> n; 
读一个字符串:String s = cin.next();         相当于   scanf("%s", s);     或 cin >> s; 
读一个浮点数:double t = cin.nextDouble();   相当于   scanf("%lf", &t); 或 cin >> t; 
读一整行:     String s = cin.nextLine();     相当于   gets(s);           或 cin.getline(...); 
判断是否有下一个输入可以用 cin.hasNext() 或 cin.hasNextInt() 或 cin.hasNextDouble() 等,具体见 TOJ 1001 例程。 

(3) 
输出一般可以直接用 System.out.print() 和 System.out.println(),前者不输出换行,而后者输出。 
比如:
同一行输出多个整数可以用 

也可重新定义: 

static PrintWriter cout = new PrintWriter(new BufferedOutputStream(System.out)); 

(4) 
对于输出浮点数保留几位小数的问题,可以使用DecimalFormat类,
import java.text.*; 
DecimalFormat f = new DecimalFormat("#.00#"); 
DecimalFormat g = new DecimalFormat("0.000"); 
double a = 123.45678, b = 0.12; 
System.out.println(f.format(a)); 
System.out.println(f.format(b)); 

这里0指一位数字,#指除0以外的数字。 


2. 大数字 

BigInteger 和 BigDecimal 是在java.math包中已有的类,前者表示整数,后者表示浮点数 

用法: 
不能直接用符号如+、-来使用大数字,例如: 

(import java.math.*)   // 需要引入 java.math 包 BigInteger a = BigInteger.valueOf(100); 
BigInteger b = BigInteger.valueOf(50); 
BigInteger c = a.add(b)   //
主要有以下方法可以使用: 
BigInteger add(BigInteger other) 
BigInteger subtract(BigInteger other) 
BigInteger multiply(BigInteger other) 
BigInteger divide(BigInteger other) 
BigInteger mod(BigInteger other) 
int compareTo(BigInteger other) 
static BigInteger valueOf(long x) 

输出大数字时直接使用 System.out.println(a) 即可。 


3. 字符串 

String 类用来存储字符串,可以用charAt方法来取出其中某一字节,计数从0开始: 
String a = "Hello";     //

用substring方法可得到子串,如上例 

System.out.println(a.substring(0, 4))     //

注意第2个参数位置上的字符不包括进来。这样做使得 s.substring(a, b) 总是有 b-a个字符。 

字符串连接可以直接用 + 号,如 
String a = "Hello"; 
String b = "world"; 
System.out.println(a + ", " + b + "!");     //

如想直接将字符串中的某字节改变,可以使用另外的StringBuffer类。 


4. 调用递归(或其他动态方法) 

在主类中 main 方法必须是 public static void 的,在 main 中调用非static类时会有警告信息, 
可以先建立对象,然后通过对象调用方法: 
public class Main 
{ void dfs(int a) { if () return; dfs(a+1); } public static void main(String args[]) { Main e = new Main(); e.dfs(0); } 
} 

5. 其他注意的事项 

(1) Java 是面向对象的语言,思考方法需要变换一下,里面的函数统称为方法,不要搞错。 

(2) Java 里的数组有些变动,多维数组的内部其实都是指针,所以Java不支持fill多维数组。 
数组定义后必须初始化,如 int[] a = new int[100]; 

(3) 布尔类型为 boolean,只有true和false二值,在 if (...) / while (...) 等语句的条件中必须为boolean类型。 
在C/C++中的 if (n % 2) ... 在Java中无法编译通过。 

(4) 下面在java.util包里Arrays类的几个方法可替代C/C++里的memset、qsort/sort 和 bsearch: 

Arrays.fill() 
Arrays.sort() 



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lucas定理及组合数取模

首先给出这个Lucas定理: A、B是非负整数,p是质数。AB写成p进制:Aa[n]a[n-1]...a[0],Bb[n]b[n-1]...b[0]。 则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0]) modp同余 即:Lucas(n,m,p)c(n%p,m%p)*Luc…

系统优化设置-之二

5、关掉不必要的服务 单击“开始”→“设置”→“控制面板”。双击“管理工具”→“服务”,打开后将看到服务列表,有些服务已经启动,有些则没有。右键单击要配置的服务,然后单击“属性”。在“常规”选项卡上选择“自动”、“手动…

CCPC网络赛前一周的充电计划

CCPC大概还有一周左右的时间,在这一周内,要补充一些数学内容,避免出现像去年学长们一样出现的情况,不能出现在碰到相关题目的时候面面相嘘不知所以然。 所以这几天的计划大体是: 1. Lucas定理 : 题库 2. 中国剩余定…

解决手机死机之锦囊妙计

引言 不久前买的586W我的是T版的英文说明书,只见说明书中介绍说如果死机的话只须拔掉电池重新安回即可.当时我就郁闷了拔电池呀?多伤机器呀?有一次下载了个JAVA游戏,刚运行就死机了(游戏BUG).于是我便想到了说明书中说道的拔电池.思前想后还是没拔,怕伤了机器;我抱着试试…

hdu 4349——Xiao Ming's Hope

题意:给定n,让求c(n,0),c(n,1)……c(n,n)中有多少奇数。 思路:本题为Lucas定理推导题,我们分析一下 C(n,m)%2,那么由lucas定理,我们可以写 成二进制的形式观察,比如 n1001101,m是从000000到10…

介绍及安装

不知读者是否听说过“宠物大战”?大意为Sun公司为帮助开发人员和架构师使用J2EE技术,发布了一个在线宠物商店Sun Java Pet Store。而微软公司则利用.NET技术也发布了一个实现同样功能的PetShop,并且在代码数量、性能等各方面对二者进行了比较…

hdu5446——Unknown Treasure

题意:给定n和m,求c(n,m)%(∏ p)的值,相当于lucas定理的一个推广,在p不是素数的情况下的一个解决方法。 思路: 首先对于c(n,m)%p[i]来讲,是一个lucas的裸题,那么对于c(n,m)%(∏ p)划分成lucas子…

自定函数获取datagrid,datalist,rpeater控件中header,footer栏中控件

在论坛上看到很多关于datagrid,gridview,datalist,rpeater提取header,footer中控件的问题,整理了一下.供大家分享下面我以DataGrid为便进行说明.footer栏又称页脚栏,在很多时候我们可以在该栏放页码及相当的功能键.但是最后在获得这些控件引用的时候就会有点麻烦,由于footer(页…

如何做好一名软件实施人员 (转载)

通过一年的软件实施,使我深深的感觉到,软件实施,其实并不是一件很容易的事,也许可算是一项挑战,很需要“明知山有虎,偏向虎山行”的信心和勇气。为什么这样说呢? 因为,软件实施可以说…

hdu 5802——Windows 10

题意:给定两个音量,需要从l调到r,每次只能向上一下或者向下(1,2,4,2^n)下(连续向下的情况下),每次可以停歇或向上来打断向下的连续性,…

20160807_第一周周报

写在前面 以后每周周日要进行一次周报,内容长短不限,为这一周的知识点和心态方面的总结,还有就是对未来的相关规划和调节!知识点方面 在知识点方面进度不是太大,打的还是一般化的套路,在这个周的前几天的…

微软认证题库

微软认证题库 70-320XML Web Service开发for C#模拟题实用软件工程方法题库MCP 70-300:基于.NET的需求分析和解决方案设计认证题库三个认证题库点击直接下载posted on 2007-12-12 22:32 当当 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/hyzhi/a…

hdu 5783——Divide the Sequence

题意及思路: 求一个序列的分段个数,使得每一段的前缀和为0,如果正向思维,那么解法是从前往后遍历,每遇到一个负数就向前遍历直到>0(这样贪心保证了序列尽可能多),但是这样最坏的情况是n^2的…

IE7快捷键

快捷方式 常规 打开或关闭全屏模式F11移动选择网页上的地址栏、“刷新”按钮、搜索框和项目Tab查找页面上的字词或短语CtrlF在新窗口中打开当前网页CtrlN打印页面CtrlP选择页面上的所有项目CtrlA放大Ctrl加号缩小Ctrl减号缩放到 100%Ctrl0导航快捷方式 转至主页 AltHome后退Alt…

BestCoder Round #86 1002 HDU 5805 ——NanoApe Loves Sequence

题意 给定一个数列,随机从该数列里删除一个数,求该数列的的相邻之间的绝对值的最大值的和。 思路 两个数列来分别维护i位前面的相邻的绝对值的最大以及i后面的最大,枚举每一个可能删除的数,然后分别从左右和要删除的这个空档里…

BestCoder Round #86 1003 HDU 5806——NanoApe Loves Sequence Ⅱ

题意: 给定一个序列,问在这个序列里有多少区间第k的的数>m 思路: 在比赛的时候是多想了,开始像区间第k大的问题,赛后想想实在是偏了。 正确的解法是枚举起点然后用尺取法维护一段区间,直到找到k个数…

Could not load the assembly 'DotNetNuke.Authentication.LiveID'. Make sure that it is compiled before

今天发生一个莫名的错误:Could not load the assembly DotNetNuke.Authentication.LiveID. Make sure that it is compiled before,在网上找了下有如下的解释: My understanding and perhaps a core member would be willing to correct me i…

详细讲解Java中log4j的使用方法

详细讲解Java中log4j的使用方法 作者: 网络 来源: 日期: 2008-1-3 23:40:24 1、Log4j是什么? Log4j可以帮助调试(有时候debug是发挥不了作 用的)和分析,要下载和了解更具体的内容,还是访问其官方网站吧: ht…

HDU 1402——A * B Problem Plus

题意&#xff1a; 给定a&#xff0c;b&#xff0c;求a*b。 思路&#xff1a; a,b的长度都为50000&#xff0c;直接模拟计算n*m肯定超时&#xff0c;可以用快速傅里叶变化计算&#xff0c;然后再把相应的系数化简出来。 code&#xff1a; #include <iostream> #inclu…

随机广告图片

1<script language”JavaScript”>2var imageList newArray;3imageList[0] “image1.jpg”;4imageList[1] “image2.jpg”;5imageList[2] “image3.jpg”;6imageList[3] “image4.jpg”;7var urlList newArray;8urlList[0] “http://some.host/”;9urlList[1] “http://a…