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

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

背景

事情是这个样子,第一次笔试时发现笔试题是ACM模式,要自己写输入输出!!!我根本就不会,最离谱的是没有代码补全不能调试!!后面我搜索之后才发现原来大家都是使用本地ide写的,只有我傻傻的直接线上写QAQ,还有比我更蠢的吗?
做到一半心态就崩了,结束后立刻搜搜搜。找到了牛客网的输入输出练习题这里记录输入输出练习的笔记,方便下次笔试时复习。

输入输出语法

JS V8

readline()可以读取一行的数据,返回字符串。
一般读取一行(一个测试用例),需要使用split()进行切割,获取其中的数据。
如果需要Int类型,可以使用parseInt(xx)转换,如果需要float类型,可以使用parseFloat(xx)转换
如果需要读取多行,可以使用循环实现

let line='';//不自动赋初始值,需要手动赋值
while(line=readline()){//line为读取的每一行的字符串
}
console.log();//输出结果

print()输出自带换行
console.log()输出自带换行

JAVA

引入输入包 import java.util.Scanner;
类名必须为Main

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

System.out.println()带换行的输出
System.out.print()不带换行的输出

scanner.hasNextInt()/scanner.nextInt()

scanner.hasNextInt() 判断输入的这个字符是不是int类型,而不是接受这个字符
一般和scanner.nextInt()结合使用
scanner.nextInt()从控制台读取一个int类型,将空格看作是两个输入的数据的间隔

Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()){//如果输入的这个字符是int类型,那么获取
	int num = scanner.nextInt();
}
scanner.nextLine()/scanner.next()

scanner.nextLine():读取一行,返回String类型
scanner.hasNextLine():根据行匹配模式去判断接下来是否有一行(包括空行\n)
scanner.next():将空格看作是两个字符串的间隔,返回字符串
scanner.hasnext():会判断接下来是否有非空字符

参考资料

VS Code配置Java运行环境

坏境配置教程

题目1 多行输入多行输出 行数列数确定

链接:https://ac.nowcoder.com/acm/contest/5657/A?&headNav=acm
来源:牛客网

输入描述:

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

输入

1 5
10 20

输出

6
30

JS

let line=''; //手动赋值
while(line = readline())//每次读一行,返回字符串,输入的很多测试用例是多行一起输入
{
    let items = line.split(" "); //根据空格切割
    let a = parseInt(items[0]);
    let b = parseInt(items[1]);
    console.log(a+b); //输出自带换行
}

JAVA

import java.util.Scanner;

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

题目2 由第一行输入确定行数 行数指定列数确定

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

题目描述
计算a+b

数据范围:数据组数满足 1≤t≤100 数据大小满足 1≤a,b≤1000
输入描述:

输入第一行包括一个数据组数t(1 <= t <= 100) 有多少行
接下来每行包括两个正整数a,b(1 <= a, b <= 1000)

输出描述:

输出a+b的结果

输入:

2
1 5
10 20

输出:

6
30

JS

let t = parseInt(readline()); //确定行数
 
for(let i=0;i<t;i++){
    let arr = readline().split(' ').map(item=>parseInt(item)) //获取每一个数
    let [a,b]=arr;
    print(a+b);
}

Java

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

题目3 由特定的输入表示输入结束 行数指定列数确定

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

题目描述
计算a+b

数据范围:数据组数满足 1 \le t \le 100 \1≤t≤100 , 数据大小满足 1 \le n \le 100 \1≤n≤100
输入描述:

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

输出描述:

输出a+b的结果

输入

1 5
10 20
0 0

输出

6
30

JS

使用break退出循环读取输入行

let line = '';
while(line = readline()){
    let items = line.split(" ").map(item => parseInt(item))
    if(!items[0] && !items[1])break;
    console.log(items[0]+items[1]);
}

JAVA

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()) {
            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/5657/D
来源:牛客网

计算一系列数的和

数据范围:数据组数满足1≤t≤100 ,每组数据中整数个数满足 1≤n≤100 ,每组数据中的值满足1≤val≤100

输入描述:

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

输出描述:

每组数据输出求和的结果

示例1
输入

4 1 2 3 4
5 1 2 3 4 5
0

输出

10
15

JS

let line = '';
while(line=readline()){
    let arr = line.split(" ").map(item => parseInt(item));
    if(arr[0]==0)break;
    let sum = 0;
    for(let i=1;i<=arr[0];++i){
        sum+=arr[i];
    }
    console.log(sum);
}

JAVA

import java.util.Scanner;

public class Main{
    public static void main(String [] agrs){
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextInt()){
            int num = scanner.nextInt();
            if(num==0) break;
            int sum=0;
            for(int i=0;i<num;i++){
                sum+= scanner.nextInt();
            }
            System.out.println(sum);
        }
    }
}

题目5 行数列数都指定

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

计算一系列数的和

数据范围:数据组数满足 1≤t≤100 ,每组数据中的整数个数满足 1≤n≤100 ,每个数据大小满足1≤val≤100
输入描述:

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

输出描述:

每组数据输出求和的结果

输入

2
4 1 2 3 4
5 1 2 3 4 5

输出

10
15

JS

let row  = parseInt(readline());
let line ="";
while(row--){
    line = readline();
    let arr = line.split(" ").map(item => parseInt(item));
    let sum = 0;
    for(let i=1;i<=arr[0];++i){
        sum+=arr[i];
    }
    print(sum);
}

JAVA

import java.util.Scanner;

public class Main{
    public static void main(String [] agrs){
        Scanner scanner = new Scanner(System.in);
        int row = scanner.nextInt();
        while(row-->0){
            int num = scanner.nextInt();
            int sum=0;
            for(int i=0;i<num;i++){
                sum+=scanner.nextInt();
            }
            System.out.println(sum);
        }
    }
}

题目6 字符串排序

题目描述
对输入的字符串进行排序后输出

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

输入描述:

输入有两行,第一行n
第二行是n个字符串,字符串之间用空格隔开

输出描述:

输出一行排序后的字符串,空格隔开,无结尾空格

输入

5
c d a bb e

输出

a bb c d e

JS

let num = parseInt(readline());
//先转换成数组,进行排序修改原数组,在转换成字符串由空格连接
let str = readline().split(" ").sort().join(" ");
print(str);

JAVA

import java.util.Scanner;
import java.util.Arrays;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n =Integer.parseInt(sc.nextLine());
        String[] str=sc.nextLine().split(" ");
        Arrays.sort(str);
        System.out.println(String.join(" ",str));
    }
}
  • 18
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值