天天看點

【秋招】ACM模式下的程式設計輸入輸出記錄寫在前面:1.計算a+b(1) 不知道輸入組數2.a+b(2)已知組數3.a+b(3) 不知道總數,但是遇到不符合輸入直接跳過處理4.a+b(4) 未知組數 已知組數内個數5.a+b(5) 已知組數 已知組數内元素個數6. a+b(6) 未知組數 未知組内個數7. 字元串排序(1)已知字元串的長度8. 字元串排序(2)多組資料,每組資料個數都未知9.字元串排序(3)每組最後一個輸出沒有分隔符10.将字元串轉變成long

寫在前面:

  • 秋招以來,接到好幾家公司的筆試,之前由于習慣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

輸出:

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

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);
           

今天七夕節,終于把這幾道題記錄完成啦,祝大家七夕快落,✿✿ヽ(°▽°)ノ✿