ACM模式的输入和输出

ACM模式的输入和输出

导包

1
import java.util.*;

示例题:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
链接:https://ac.nowcoder.com/acm/contest/5657/G
来源:牛客网

输入数据有多组, 每行表示一组输入数据。每组数据输出求和的结果
每行不定有n个整数,空格隔开。(1 <= n <= 100)。
参考示例:
输入:
1 2 3
4 5
0 0 0 0 0
输出:
6
9
0

比较常见的写法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        // 一次读一行
        while(sc.hasNextLine()){            
              String[] num = sc.nextLine().split(" ");
            int sum=0;            
            for(int i=0;i<num.length;i++)
            {   sum += Integer.parseInt(num[i]);
            }
            System.out.println(sum);
         }
    }
}

如果是像这种按行读取还有一种性能更好的方式,但是需要注意要抛出异常。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.*;
import java.io.*;

public class Main{
    public static int ret = 0;
    public static String line;
    public static String[] pair;
   
    public static void main(String[] args) throws IOException{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        while((line = in.readLine())!=null){
            pair = line.split(" ");
            ret  =0;
            for(int i=0;i<pair.length;i++){
                ret+= Integer.valueOf(pair[i]);
            }
            out.println(ret);
        }
        out.flush();
    }
}

利用带缓冲区的io替代原来的输入输出方案。能一定程度上降低运行时间。但是Scanner也有一定的优势,能够按照类型进行读取。

但是输入流再用StreamTokenizer进行包装也能达到一样的效果。

示例题:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。

输入例子:
4 1 2 3 4
5 1 2 3 4 5
输出例子:
10
15
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StreamTokenizer in = new StreamTokenizer(br);
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
         
        while(in.nextToken() != StreamTokenizer.TT_EOF){
            int N = (int)in.nval;
            int res = 0;
            for(int i = 0; i < N; i++){
                in.nextToken();
                res += (int)in.nval;
            }
            out.println(res);
            out.flush();
        }
    }
Licensed under CC BY-NC-SA 4.0