【秋招】ACM模式下的编程输入输出记录

1 篇文章 0 订阅
1 篇文章 0 订阅

写在前面:

  • 秋招以来,接到好几家公司的笔试,之前由于习惯Leetcode编程模式,只需要编写算法核心代码,导致笔试时经常因为前面编写输入输出头疼,当然还是因为语言不精通的原因吧!这篇文章记录一下牛客网上ACM编程模式下的输入输出函数,以便日后翻找查阅。
  • 感兴趣的同学可以通过以下链接访问进行ACM模式输入输出刷题:https://ac.nowcoder.com/acm/contest/5657#question
  • 以下代码都使用Java编写
  • 已知个数 考虑使用for循环控制;未知个数,使用while(sc.hasNext())控制

1.计算a+b(1) 不知道输入组数

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

输入描述:
输入包括两个正整数a,b(1 <= a, b <= 1000),输入数据包括多组。
输出描述:
输出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);
    //使用hasNext判断还有没有下一个,hasNextLine判断还有没有下一行,
    //这里不可以使用hasNextLine,会报错
    while(sc.hasNext()){
        int a=sc.nextInt();
        int b=sc.nextInt();
        int c=a+b;
        System.out.println(c);
    }
    }
}

Notes:

1. 在ACM模式下 类名只能是Main
2. 注意里面主函数写法,此模式下没有psvm的快捷补全
public static void main(String args[])
3. 键盘输入函数 Scanner sc=new Scanner(System.in);

2.a+b(2)已知组数

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

输入描述:
输入第一行包括一个数据组数t(1 <= t <= 100)
接下来每行包括两个正整数a,b(1 <= a, b <= 1000)
输出描述:
输出a+b的结果
示例:
输入
2
1 5
10 20
输出
6
30

import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        //使用num记录数据组数
        int num=sc.nextInt();
        for(int i=0;i<num;i++){
            int a=sc.nextInt();
            int b=sc.nextInt();
            int sum=a+b;
            System.out.println(sum);
        }
    }
}

3.a+b(3) 不知道总数,但是遇到不符合输入直接跳过处理

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

数据范围:数据组数满足 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

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();
            //如果遇到0就跳过本次循环 执行下一次
            if(a==0 || b==0){
                continue;
            }
            int sum=a+b;
            System.out.println(sum);
     }
        sc.close();
    }

}

4.a+b(4) 未知组数 已知组数内个数

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

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

import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int num=sc.nextInt();
            if(num==0) continue;
            //开辟数组存储输入数据
            int[] arr=new int[num];
            //使用sum记录每组数据之和
            int sum=0;
            for(int i=0;i<num;i++){
//                 if(num==0) break;
                arr[i]=sc.nextInt();
                sum+=arr[i];
            }
            System.out.println(sum);
        }
        sc.close();
    }
}

5.a+b(5) 已知组数 已知组数内元素个数

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

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

import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner sc= new Scanner(System.in);
        //记录组数
        int num=sc.nextInt();
        for(int i=0;i<num;i++){
            int sum=0;
            //subnum记录组数内元素的个数
            int subnum=sc.nextInt();
            int[] arr=new int[subnum];
            for(int j=0;j<subnum;j++){
                arr[j]=sc.nextInt();
                sum+=arr[j];
            }
            System.out.println(sum);
        }
        sc.close();
    }
}

6. a+b(6) 未知组数 未知组内个数

链接: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

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc= new Scanner(System.in);
        while(sc.hasNextLine()){
            //输入数据按照行存放到数组中,数据输入时以空格空开
            String[] str= sc.nextLine().split(" ");
            int sum=0;
            //使用Integer.parseInt()函数将字符串转变成整数值
            for(int i=0;i<str.length;i++){
                sum+= Integer.parseInt(str[i]);
            }
            System.out.println(sum);
        }
    }
}

7. 字符串排序(1)已知字符串的长度

输入描述:
输入有两行,第一行n
第二行是n个字符串,字符串之间用空格隔开
输出描述:
输出一行排序后的字符串,空格隔开,无结尾空格
输入:
5
c d a bb e
输出:
a bb c d e

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc =new Scanner(System.in);
        //num是字符个数
        //next遇到空格就停止 nextline遇到回车停止
        String num= sc.nextLine();
//         System.out.print(num);
        //使用字符串数组保存需要排序的字母
        String[] arr= sc.nextLine().split(" "); 
//         System.out.print(arr.length);
        Arrays.sort(arr);
        
        //使用for-each遍历,更简便
        for(String i: arr){
            System.out.print(i+ " ");
        }
//         for(int i=0;i<arr.length;i++){
//             System.out.print(arr[i]+ " ");
//         }
    }
}

Note:

  1. 如果对输入个数处理只是用nextInt函数,遇到第一个空格就录入结束,也就是数字保留下来。
  2. 再使用nextLine函数保存一串数字的时候,就先回保存空格,然后遇到第一个回车就结束了,此时数组中只保存了空格 没有数字!

8. 字符串排序(2)多组数据,每组数据个数都未知

输入描述:
多个测试用例,每个测试用例一行。
每行通过空格隔开,有n个字符,n<100
输出描述:
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
事例:
输入
a c bb
f dddd
nowcoder
输出
a bb c
dddd f
nowcoder

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc= new Scanner(System.in);
        while(sc.hasNextLine()){
            String[] arr= sc.nextLine().split(" ");
            Arrays.sort(arr);
            //遍历输出数组中的值
            for(String i: arr){
                System.out.print(i+" ");
            }
            //不同组数据之间空行表示
            System.out.println();
        }
    }
}

9.字符串排序(3)每组最后一个输出没有分隔符

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

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

10.将字符串转变成long

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

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc =new Scanner(System.in);
        while(sc.hasNextLine()){
            String[] arr= sc.nextLine().split(" ");
            //测试用例中数字很大For input string: "12141483647"
            //使用数据类型long
            long sum=0;
//             int sum=0;
            for(String i: arr){
                //str转变类型为long
                long num= Long.valueOf(i);
//                 int num=Integer.parseInt(i);
                sum+=num;
            }
            System.out.println(sum);
        }
    }
}
         注意!!!   //str转变类型为long
            long num= Long.valueOf(i);

今天七夕节,终于把这几道题记录完成啦,祝大家七夕快落,✿✿ヽ(°▽°)ノ✿

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值