转载自:http://blog.csdn.net/Chen_Tongsheng/article/details/53354169

一、注意点

1. 类名称必须采用public class Main方式命名

2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误

3. 有些OJ上的题目会直接将OI上的题目拷贝过来,所以即便是题目中有输入和输出文件,可能也不需要,因为在OJ系统中一般是采用标准输入输出,不需要文件

4. 在有多行数据输入的情况下,一般按以下代码示例处理:

  1. import java.util.Scanner;
  2.  
  3. import java.io.*;
  4.  
  5. public class Main{
  6.  
  7. public static void main(String[] args){
  8.  
  9. Scanner in1 = new Scanner(System.in);
  10.  
  11. Scanner in2 = new Scanner(new BufferedInputStream(System.in));//输入速度较前者 in1 要快,但但一般不用这个BufferedInputStream缓存
  12.  
  13. //输入多组测试数据一般用:while(in1.hasNextInt()) 或者是 while(in1.hasNext())
  14.  
  15. }
  16.  
  17. }
  1. long startTime = System.nanoTime();
  2.  
  3. // Code... 运用算法来解决问题的运行代码
  4.  
  5. long estimatedTime = System.nanoTime() - startTime;

二、输入输出处理

由于ACM竞赛题目的输入数据和输出数据一般有多组(不定),并且格式多种多样,所以,如何处理题目的输入输出是对大家的一项最基本的要求。这也是困扰初学者的一大问题。

1. 输入

格式1:Scanner sc = new Scanner (new BufferedInputStream(System.in));
格式2:Scanner sc = new Scanner (System.in);
在读入数据量大的情况下,格式1的速度会快些。
读一个整数: int n = sc.nextInt(); 相当于 scanf("%d", &n); 或 cin >> n; 
读一个字符串:String s = sc.next(); 相当于 scanf("%s", s); 或 cin >> s; 
读一个浮点数:double t = sc.nextDouble(); 相当于 scanf("%lf", &t); 或 cin >> t; 
读一整行: String s = sc.nextLine(); 相当于 gets(s); 或 cin.getline(...); 
判断是否有下一个输入可以用sc.hasNext()或sc.hasNextInt()或sc.hasNextDouble()或sc.hasNextLine()

例1:读入整数
Input  输入数据有多组,每组占一行,由一个整数组成。 
Sample Input 
56
67
100
123

例2:读入实数
 
输入数据有多组,每组占2行,第一行为一个整数N,指示第二行包含N个实数。
Sample Input

56.9  67.7  90.5  12.8 

56.9  67.7  90.5  12.8

  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. while (sc.hasNext()) {
  7. int n = sc.nextInt();
  8. for (int i = 0; i < n; i++) {
  9. double a = sc.nextDouble();
  10. }
  11. }
  12. }
  13. }

例3:读入字符串【杭电2017 字符串统计】
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。

Sample Input  
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf

  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. int n = sc.nextInt();
  7. for (int i = 0; i < n; i++) {
  8. String str = sc.next();
  9.  
  10. }
  11. }
  12. }
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. int n = Integer.parseInt(sc.nextLine());
  7. for (int i = 0; i < n; i++) {
  8. String str = sc.nextLine();
  9.  
  10. }
  11. }
  12. }

例3:读入字符串【杭电2005 第几天?】
给定一个日期,输出这个日期是该年的第几天。 
Input  输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成
1985/1/20
2006/3/12

  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. int n = Integer.parseInt(sc.nextLine());
  7. for (int i = 0; i < n; i++) {
  8. String str = sc.nextLine();
  9.  
  10. }
  11. }
  12. }

2. 输出

函数:
System.out.print(); 
System.out.println(); 
System.out.format();
System.out.printf();

3. 规格化的输出

函数:
// 这里0指一位数字,#指除0以外的数字(如果是0,则不显示),四舍五入.
    DecimalFormat fd = new DecimalFormat("#.00#");
    DecimalFormat gd = new DecimalFormat("0.000");
    System.out.println("x =" + fd.format(x));
    System.out.println("x =" + gd.format(x));

  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. NumberFormat formatter = new DecimalFormat("000000");
  6. String s = formatter.format(-1234.567); // -001235
  7. System.out.println(s);
  8. formatter = new DecimalFormat("##");
  9. s = formatter.format(-1234.567); // -1235
  10. System.out.println(s);
  11. s = formatter.format(0); // 0
  12. System.out.println(s);
  13. formatter = new DecimalFormat("##00");
  14. s = formatter.format(0); // 00
  15. System.out.println(s);
  16.  
  17. formatter = new DecimalFormat(".00");
  18. s = formatter.format(-.567); // -.57
  19. System.out.println(s);
  20. formatter = new DecimalFormat("0.00");
  21. s = formatter.format(-.567); // -0.57
  22. System.out.println(s);
  23. formatter = new DecimalFormat("#.#");
  24. s = formatter.format(-1234.567); // -1234.6
  25. System.out.println(s);
  26. formatter = new DecimalFormat("#.######");
  27. s = formatter.format(-1234.567); // -1234.567
  28. System.out.println(s);
  29. formatter = new DecimalFormat(".######");
  30. s = formatter.format(-1234.567); // -1234.567
  31. System.out.println(s);
  32. formatter = new DecimalFormat("#.000000");
  33. s = formatter.format(-1234.567); // -1234.567000
  34. System.out.println(s);
  35.  
  36. formatter = new DecimalFormat("#,###,###");
  37. s = formatter.format(-1234.567); // -1,235
  38. System.out.println(s);
  39. s = formatter.format(-1234567.890); // -1,234,568
  40. System.out.println(s);
  41.  
  42. // The ; symbol is used to specify an alternate pattern for negative
  43. // values
  44. formatter = new DecimalFormat("#;(#) ");
  45. s = formatter.format(-1234.567); // (1235)
  46. System.out.println(s);
  47.  
  48. // The ' symbol is used to quote literal symbols
  49. formatter = new DecimalFormat(" '# '# ");
  50. s = formatter.format(-1234.567); // -#1235
  51. System.out.println(s);
  52. formatter = new DecimalFormat(" 'abc '# ");
  53. s = formatter.format(-1234.567); // - abc 1235
  54. System.out.println(s);
  55.  
  56. formatter = new DecimalFormat("#.##%");
  57. s = formatter.format(-12.5678987);
  58. System.out.println(s);
  59. }
  60. }

4. 字符串处理 String

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

String a = "Hello"; // a.charAt(1) = 'e'

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

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

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

字符串连接可以直接用 + 号,如

String a = "Hello";

String b = "world";

System.out.println(a + ", " + b + "!"); // output "Hello, world!"

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

5. 高精度

BigInteger和BigDecimal可以说是acmer选择java的首要原因。
函数:add, subtract, divide, mod, compareTo等,其中加减乘除模都要求是BigInteger(BigDecimal)和BigInteger(BigDecimal)之间的运算,所以需要把int(double)类型转换为BigInteger(BigDecimal),用函数BigInteger.valueOf().

  1. import java.io.BufferedInputStream;
  2. import java.math.BigInteger;
  3. import java.util.Scanner;
  4. public class Main {
  5. public static void main(String[] args) {
  6. Scanner cin = new Scanner (new BufferedInputStream(System.in));
  7. int a = 123, b = 456, c = 7890;
  8. BigInteger x, y, z, ans;
  9. x = BigInteger.valueOf(a);
  10. y = BigInteger.valueOf(b);
  11. z = BigInteger.valueOf(c);
  12. ans = x.add(y); System.out.println(ans);
  13. ans = z.divide(y); System.out.println(ans);
  14. ans = x.mod(z); System.out.println(ans);
  15. if (ans.compareTo(x) == 0) System.out.println("1");
  16. }
  17. }

6. 进制转换

String st = Integer.toString(num, base); // 把num当做10进制的数转成base进制的st(base <= 35).
int num = Integer.parseInt(st, base); // 把st当做base进制,转成10进制的int(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制).  
BigInter m = new BigInteger(st, base); // st是字符串,base是st的进制.

7. 数组排序

函数:Arrays.sort();

蓝桥杯Java输入输出相关的更多相关文章

  1. 蓝桥杯java历年真题及答案整理1~20.md

    蓝桥杯java历年真题及答案整理(闭关一个月,呕心沥血整理出来的) 1 算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种.如:给定 A.B.C三个不同的字符,则结果为:A ...

  2. 蓝桥杯java试题《洗牌》

    问题描述 小弱T在闲暇的时候会和室友打扑克,输的人就要负责洗牌.虽然小弱T不怎么会洗牌,但是他却总是输. 渐渐地小弱T发现了一个规律:只要自己洗牌,自己就一定会输.所以小弱T认为自己洗牌不够均匀,就独 ...

  3. 蓝桥杯Java真题解析

    上个月参加蓝桥杯省赛拿了个省一,自从比赛完之后就一直没怎么写代码了,还有一个多月就要国赛了,从现在开始准备下国赛,但是我也不想学什么算法,而且我还在准备考研,所以就打算只做下历年的真题,争取国赛拿个国 ...

  4. 【备考06组01号】第四届蓝桥杯JAVA组A组国赛题解

    1.填算式 (1)题目描述     请看下面的算式:     (ABCD - EFGH) * XY = 900     每个字母代表一个0~9的数字,不同字母代表不同数字,首位不能为0.     比如 ...

  5. 第八届蓝桥杯java b组第六题

    标题:最大公共子串 最大公共子串长度问题就是:求两个串的所有子串中能够匹配上的最大长度是多少. 比如:"abcdkkk" 和 "baabcdadabc",可以找 ...

  6. 第三届蓝桥杯Java高职组决赛第三题

    题目描述: 某少年宫引进了一批机器人小车.可以接受预先输入的指令,按指令行动.小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字). 例如,我们可以对小车输入如 ...

  7. 第三届蓝桥杯Java高职组决赛第一题

    题目描述: 看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字. 这个算式有多少种可能的正确填写方法? 173 + 286 = 459 295 + 173 = ...

  8. 蓝桥杯java 关于大范围时间的

    import java.util.Calendar; import java.util.Date; public class A { /*这道题学习使用了java的calendar和类,主要是对dat ...

  9. 49-2015年第6届蓝桥杯Java B组

    1.三角形面积 如图1所示.图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何多余内容或说明性文字.   image.png   计算方法: 8 * ...

随机推荐

  1. AJPFX辨析continue与break的区别

    1.break : (1).结束当前整个循环,执行当前循环下边的语句.忽略循环体中任何其它语句和循环条件测试.(2).只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用br ...

  2. 【转】pom.xml讲解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  3. 《超实用的Node.js代码段》连载一:获取Buffer对象字节长度

    我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.by ...

  4. 如何快速构建CMBD系统-glpi

    一.CMBD系统构建步骤 起初,开发这套CMBD系统是为了帮助朋友公司简化设备统计操作,以代替人工入库方式.举个例子,单位发放笔记本,或者设备更换了硬盘,都需要人工签到,手动输入统计,安装了CMBD系 ...

  5. 事务回滚 DEMO

    因为有些事物回滚  查询的时候 可能查出来空值 我们肯定不愿意把空值添加数据库里面 一般基本的是这么写 if (object_id('add_T_Disclose_DiscloseList', 'P' ...

  6. JavaSe-算数运算符

    算数运算符包括:+.-.*./.%.++.-- 代码: package com.java.chap02; public class Demo07 { public static void main(S ...

  7. 远程桌面连接(mstsc)无法断开的解决方案

    某2008 r2有二个系统账户,同时允许两个tcp连接,但每个用户仅同时允许一人登录.不知何因,关闭远程桌面连接的窗口后,再次连接就瞬间提示无法被连接.查看了事件查看器,信息为被注销,这是因为设置了“ ...

  8. BZOJ 1396:识别子串 SA+树状数组+单调队列

    1396: 识别子串 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 381  Solved: 243[Submit][Status][Discuss] ...

  9. Ubuntu下手动安装NextCloud

    安装环境:阿里云VPS Ubuntu 16.04   一. 安装Apache2 sudo apt-get install apache2 安装完成后,浏览器访问http://your ip/,出现It ...

  10. python之生成器的初识

    1. 生成器的定义 生成器的本质就是迭代器.python社区生成器和迭代器是一种 2. 生成器和迭代器区别 迭代器: ​ 都是Python给你提供的已经写好的工具或者通过数据转化得来的 生成器: ​ ...