码迷,mamicode.com
首页 > 编程语言 > 详细

ACM中java的使用

时间:2014-09-25 18:56:47      阅读:319      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   java   ar   

建议用IDE比如eclipse,因为有大量函数都会自动显示,相当方便

 

首先来看一题POJ1274的二分图匹配算法的java实现,给出总体的框架

import java.util.*;//基本框架

//主class必须与文件名相同 但在poj上交时class要改成Main public class poj1274 { //需要设置static变量才可以在static void中使用 相当于全局变量 //数组具体数值需要通过new申请 static int be[], ne[], e[], all; static int pre[]; static boolean vis[]; static int n, m; public static void add(int x, int y) { e[all]=y; ne[all]=be[x]; be[x]=all++; } //java中0/1不再与false/true相同 public static boolean dfs(int x) { for(int i=be[x]; i!=-1; i=ne[i]) if(!vis[e[i]]) { vis[e[i]]=true; if(pre[e[i]]==0 || dfs(pre[e[i]])) { pre[e[i]]=x; return true; } } return false; } //main程序必须是static public static void main(String[] args) { //输入方法 //java的IO比C++慢很多 除此之外效率相当 Scanner cin = new Scanner(System.in); while(cin.hasNext())//判断是否还有输入 { //每次数组都需要申请 初始值一般都是0或false all = 0; //读入几乎都是nextXXX n = cin.nextInt(); m = cin.nextInt(); be = new int[n+m+5]; ne = new int[n*m*2+5]; e = new int[n*m*2+5]; vis = new boolean[n+m+5]; pre = new int[n+m+5]; //相当于memset,但只能用于一维数组的初始化 Arrays.fill(be, -1); for(int i=1; i<=n; i++) { int t=cin.nextInt(); for(int j=1; j<=t; j++) { int k=cin.nextInt(); add(i, k+n); } } int ans=0; for(int i=1; i<=n; i++) { Arrays.fill(vis, false); if(dfs(i)) ans++; } //输出 System.out.println(ans); } } }

其中java中主类中main方法必须用public static void,然而这样main中的调用的函数都应设置为static类,否则会显示警告信息。

不过也可以先建立对象,然后通过调用对象来用相应的函数

import java.util.*;

public class test
{
    public void work()
    {
        //...
    }
    public static void main(String args[])
    {
        test e = new test();
        e.work();
    }
}

 

从上述例子可以看出java的实现与C++差别不大,

接下来给出更系统的区别:

top 1 :输入输出

import java.util.*;
import java.io.*;//标准输入输出流
import java.math.*;//导入大整数BigInteger
import java.text.*;//输出格式化

public class test
{
    public static void main(String[] args)
    {
    //输入
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        Scanner cin2 = new Scanner(System.in);//上面输入方法会快一些
        int a = cin.nextInt();
        long b = cin.nextLong();
        double c = cin.nextDouble();
        BigInteger d = cin.nextBigInteger();
        String s = cin.next();
     String s2 = cin.nextLine();
//输出 System.out.print(a); System.out.println(b); //相当于C++中printf 四舍五入保留三位小数 c的字宽为10 System.out.printf("%10.3f\n", c); System.out.println(d); //字符串连接用+ 很方便 System.out.println(s+‘!‘); //格式化输出 保留4位小数 若不足补0 DecimalFormat formatter = new DecimalFormat("#.0000"); System.out.println(formatter.format(c)); //多组数据读入 直到没有读入 while(cin.hasNext()) { } } }

 

top 2 : 大数应用

其实相应的加减乘除都有相应的函数,完全可以阅读出来

大分数:POJ1131

大意:八进制的小数 转 十进制

bubuko.com,布布扣
import java.util.*;
import java.io.*;
import java.math.*;

public class poj1131
{
    public static void main(String args[])
    {
        int k;
        BigDecimal ans, sum;
        String str;
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        while(cin.hasNext())
        {
            str = cin.next();
            sum = BigDecimal.ONE;
            ans = BigDecimal.ZERO;
            for(int i=2; i<str.length(); i++)
            {
                k = str.charAt(i)-‘0‘;
                sum = sum.multiply(BigDecimal.valueOf(8));
                ans = ans.add(BigDecimal.valueOf(k).divide(sum));
            }
            System.out.print(str+" [8] = ");
            System.out.print(ans);
            System.out.print(" [10]\n");
        }
    }
}
View Code

 

大整数:POJ1306

大意:求C(n, m)

bubuko.com,布布扣
import java.util.*;
import java.io.*;
import java.math.*;

public class poj1306
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        while(cin.hasNext())
        {
            BigInteger ans = BigInteger.ONE;
            int n = cin.nextInt();
            int m = cin.nextInt();
            if(n==0 && m==0)
                break;
            for(int i=1; i<=n; i++)
                ans = ans.multiply(BigInteger.valueOf(i));
            for(int i=1; i<=m; i++)
                ans = ans.divide(BigInteger.valueOf(i));
            for(int i=1; i<=n-m; i++)
                ans = ans.divide(BigInteger.valueOf(i));
            System.out.printf("%d things taken %d at a time is %s exactly.\n", n, m, ans.toString());
        }
    }
}
View Code

 

top 3 : 其他操作

数组常用操作

import java.util.*;
import java.io.*;
import java.math.*;

public class test
{
    public static void main(String args[])
    {
        int a[] = {10,2,2,5,7,8,9,11,1};
        //复制数组
        int b[] = Arrays.copyOf(a, a.length);
        //排序
        Arrays.sort(b);
        //二分查找数组 要先排序
        System.out.print(Arrays.binarySearch(b, 10));
    }
}

进制转换

import java.util.*;
import java.math.*;

public class test
{
    public static void main(String args[])
    {
        int a = 9999, base = 8;
        //将数字a转换成base进制 并且转成string
        String s = Integer.toString(a, base);
        //将字符串s 其中s为base进制的数 转化为10进制的数
        int b = Integer.parseInt(s, base);
        //大整数初始值为字符串s 其中s为base进制的数
        BigInteger c = new BigInteger(s, base);
        //将大整数c转换成base进制 并且转成string
        String s2 = c.toString(base);
    }
}

 

 

此外,java的实用功能有

java的正则表达式,可参见:http://blog.csdn.net/lenhan12345/article/details/1459667

java的常用集合(相当于C++中的STL,图片来源于网上),可参见:http://blog.csdn.net/mingchaoyan/article/details/6301858

bubuko.com,布布扣

 

至于更详细的部分,如果可能的话,我将在今后继续补充!

ACM中java的使用

标签:style   blog   http   color   io   os   使用   java   ar   

原文地址:http://www.cnblogs.com/Mathics/p/3991083.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!