ACM模式输入输出练习

Posted Zephyr丶J

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM模式输入输出练习相关的知识,希望对你有一定的参考价值。

跟着课程的问题来看下怎么在acm模式下写输入输出
这里先写几个想到的问题:

第一个:hasNextLine和hasNext的区别

hasNext是检查是否有非空字符。
hasNextLine是检查输入中是否还有linePattern。其中LinePattern其实是匹配一个正则表达式。
hsaNextInt是检查输入中是否有整数
采用has xxxx的话,后面也要用next xxxx。比如前面用hasNextLine,那么后面要用 nextLine 来处理输入。

sc.hasNext()----输入值后返回的类型为boolean
sc.nextInt() ------输入值后返回的类型为int
sc.next() ------返回的是你输入的那个值

第二个

hasNext()这个方法是如果此扫描器的输入中有另一个标记,则返回 true。在等待要扫描的输入时,此方法可能阻塞。扫描器将不执行任何输入。所以循环会一直下去。
可以设置一个终止符,调用hasNext()的重载方法hasNext(String patten):如果下一个标记与从指定字符串构造的模式匹配,则返回 true。扫描器不执行任何输入。 例如:

Scanner sc = new Scanner(System.in);
while (!sc.hasNext("0")) {
System.out.println(sc.next());

求和

1.描述

链接:https://ac.nowcoder.com/acm/contest/12815/A
来源:牛客网

输入描述:
输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组。
输出描述:
输出a+b的结果
示例1
输入

1 5
10 20
输出

6
30

代码

第一种

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String[] ss = sc.nextLine().split(" ");
            int sum = Integer.parseInt(ss[0]) + Integer.parseInt(ss[1]);
            System.out.println(sum);
        }
    }
}

第二种

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            System.out.println(a + b);
        }
    }
}

第三种

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while((s = br.readLine()) != null){
            String[] temp = s.split(" ");
            System.out.println(Integer.parseInt(temp[0]) + Integer.parseInt(temp[1]));
        }
    }
}

2.描述

链接:https://ac.nowcoder.com/acm/contest/12815/B
来源:牛客网

输入描述:
输入第一行包括一个数据组数t(1 <= t <= 100)
接下来每行包括两个正整数a,b(1 <= a, b <= 10^9)
输出描述:
输出a+b的结果

代码

第一种

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for(int i = 0; i < t; i++){
            int a = sc.nextInt();
            int b = sc.nextInt();
            System.out.println(a + b);
        }
    }
}

第二种
需要特别注意这种情况,就是输入一个数字后面输入一行字符串,需要加一条sc.nextLine(); 来跳过输入数字后面的空行,否则会出现越界

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        sc.nextLine();
        for(int i = 0; i < t; i++){
            String[] ss = sc.nextLine().split(" ");
            System.out.println(Integer.parseInt(ss[0]) + Integer.parseInt(ss[1]));
        }
    }
}

第三种

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(br.readLine());
        for(int i = 0; i < t; i++){
            String[] ss = br.readLine().split(" ");
            System.out.println(Integer.parseInt(ss[0]) + Integer.parseInt(ss[1]));
        }
    }
}

3.描述

链接:https://ac.nowcoder.com/acm/contest/12815/C
来源:牛客网

输入描述:
输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入
输出描述:
输出a+b的结果

代码

第一种

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        //这里写成hasNext()也能过
        while(sc.hasNextLine()){
            String[] ss = sc.nextLine().split(" ");
            int a = Integer.parseInt(ss[0]);
            int b = Integer.parseInt(ss[1]);
            if(a == 0 && b == 0)
                break;
            System.out.println(a + b);
        }
    }
}

第二种

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int a = sc.nextInt();
            int b = sc.nextInt();
            if(a == 0 && b == 0)
                break;
            System.out.println(a + b);
        }
    }
}

4.描述

链接:https://ac.nowcoder.com/acm/contest/12815/D
来源:牛客网

输入描述:
输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果

代码

就用最简单的输入吧

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            if(n == 0)
                break;
            int sum = 0;
            for(int i = 0; i < n; i++){
                sum += sc.nextInt();
            }
            System.out.println(sum);
        }
    }
}

5.描述

链接:https://ac.nowcoder.com/acm/contest/12815/E
来源:牛客网

输入描述:
输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
接下来t行, 每行一组数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果

代码

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int k = sc.nextInt();
        for(int i = 0; i < k; i++){
            int n = sc.nextInt();
            int sum = 0;
            for(int j = 0; j < n; j++){
                sum += sc.nextInt();
            }
            System.out.println(sum);
        }
    }
}

6.描述

链接:https://ac.nowcoder.com/acm/contest/12815/G
来源:牛客网

输入描述:
输入数据有多组, 每行表示一组输入数据。

每行不定有n个整数,空格隔开。(1 <= n <= 100)。
输出描述:
每组数据输出求和的结果

代码

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String[] ss = sc.nextLine().split(" ");
            int sum = 0;
            for(int i = 0; i < ss.length; i++){
                sum += Integer.valueOf(ss[i]);
            }
            System.out.println(sum);
        }
    }
}

字符串

1.描述

链接:https://ac.nowcoder.com/acm/contest/12815/H
来源:牛客网

输入描述:
输入有两行,第一行n

第二行是n个空格隔开的字符串
输出描述:
输出一行排序后的字符串,空格隔开,无结尾空格

代码

再注意一下,接收数字后输入字符串,需要注意接收空行!!

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        String[] s = sc.nextLine().split(" ");
        Arrays.sort(s);
        for(int i = 0; i < s.length; i++){
            System.out.print(s[i] + " ");
        }
    }
}

2.描述

链接:https://ac.nowcoder.com/acm/contest/12815/I
来源:牛客网

输入描述:
多个测试用例,每个测试用例一行。

每行通过空格隔开,有n个字符,n<100
输出描述:
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开

代码

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String[] s = sc.nextLine().split(" ");
            Arrays.sort(s);
            for(int i = 0; i < s.length; i++){
                System.out.print(s[i] + " ");
            }
            System.out.println();
        }
    }
}

3.描述

链接:https://ac.nowcoder.com/acm/contest/12815/J
来源:牛客网

输入描述:
多个测试用例,每个测试用例一行。
每行通过,隔开,有n个字符,n<100
输出描述:
对于每组用例输出一行排序后的字符串,用','隔开,无结尾空格

代码

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String[] s = sc.nextLine().split(",");
            Arrays.sort(s);
            for(int i = 0; i < s.length; i++){
                if(i == s.length - 1)
                    System.out.print(s[i]);
                else
                    System.out.print(s[i] + ",");
            }
            System.out.println();
        }
    }
}

最后一个

输入描述:
输入有多组测试用例,每组空格隔开两个整数
输出描述:
对于每组数据输出一行两个整数的和

代码

得用long

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            long a = sc.nextLong();
            long b = sc.nextLong();
            System.out.println(a + b);
        }
    }
}

最后再写下IO

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while((s = br.readLine()) != null){
            String[] ss = s.split(" ");
            long a = Long.parseLong(ss[0]);
            long b = Long.parseLong(ss[0]);
            System.out.println(a + b);
        }
    }
}

以上是关于ACM模式输入输出练习的主要内容,如果未能解决你的问题,请参考以下文章

牛客网ACM模式 JsV8和Java输入输出练习

python3 牛客网:OJ在线编程常见输入输出练习(ACM模式)

ACM模式下JavaScript(js)的输入输出 V8 Node

基本输入输出练习 hdu1089-1096

第十七周自由练习项目——acm 学生最高最低成绩

第十七周自由练习项目——acm 学生最高最低成绩