输入输出模板(Golang版)|ACM模式

1,529 阅读3分钟

引言

Golang刷题的输入输出模版,目前大多数笔试都是ACM模式,如果习惯了力扣的核心代码模式,需要笔试前多加练习! Golang主要掌握fmt.Scan()fmt.Scanln()bufio.NewScanner(os.Stdin)的使用。

OJ在线编程常见输入输出练习场

计算a+b

1.

输入: 包括两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组。

输出: a+b的结果

func main() {
    var a, b int
    for {
        n, _ := fmt.Scanln(&a, &b)  //也可以用 fmt.Scan
        if n == 0 {
            break
        } else {
            fmt.Printf("%d\n", a+b)
        }
    }
}

2.

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

输出: a+b的结果

func main(){
    var t,a,b int
    fmt.Scanln(&t)
    for i:=0;i<t;i++{
        fmt.Scanln(&a,&b)
        fmt.Println(a+b)
    }
}

3.

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

输出: a+b的结果

func main() {
    var a, b int
    for {
        fmt.Scanln(&a, &b)  //也可以用 fmt.Scan
        if a == 0 && b == 0 {
            break
        } else {
            fmt.Printf("%d\n", a+b)
        }
    }
}

4.大数求和

输入: 输入数据包括多组。
每组数据一行,包含两个字符串形式的非负整数

输出: 对于每组测试数据,计算它们的和,输出字符串。

package main
import (
    "fmt"
    "strconv"
)

func main() {
    var s1, s2 string
    for {
        n, _ := fmt.Scanln(&s1, &s2)  //也可以用 fmt.Scan
        if n == 0 {
            break
        } else {
            fmt.Printf("%s\n", bigNumberAdd(s1, s2))
        }
    }
}
func bigNumberAdd(s1, s2 string) string {
    i, j := len(s1) - 1, len(s2) - 1
    num1, num2 := 0, 0
    carry := 0 //进位
    s := ""
    for (i >= 0 || j >= 0) {
        if (i >= 0) {
            num1,_ =strconv.Atoi(string(s1[i]))
        } else {
            num1 = 0
        }
        if (j >= 0) {
            num2,_ =strconv.Atoi(string(s2[j]))
        } else {
            num2 = 0
        }

        sum := (num1+num2+carry)%10//取余
        s += strconv.Itoa(sum)
        carry = (num1+num2+carry)/10
        i--
        j--
    }
    if (carry != 0) {
        s += "1"
    }
    return reverseString(s)
}
func reverseString(s string) string {
    res := []byte(s)
    for left, right := 0, len(s)-1; left < right; left++ {
        res[left], res[right] = res[right], res[left]
        right--
    }
    return string(res)
}

一行多个数字求和

1.

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

输出: 每组数据输出求和的结果

func main() {
    var t int
    for {
        var sum int      
        fmt.Scan(&t)
        if t == 0 {
                break
        } else {
            a := make([]int, t)
            for i := 0; i < t; i++ {
                fmt.Scan(&a[i])
                sum += a[i]
            }
        }
        fmt.Println(sum)
    }
}

2.

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

输出: 每组数据输出求和的结果

func main() {
    var t int
    fmt.Scan(&t)
    for i := 0; i < t; i++ {
        var num, sum, a int
        fmt.Scan(&num)
        for i := 0; i < num; i++ {
                fmt.Scan(&a)
                sum += a
        }
        fmt.Println(sum)
    }
}

3.

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

输出:每组数据输出求和的结果

func main() {
    var t int
    for {
        var sum int
        n,_ := fmt.Scan(&t)
	if n == 0 {
            break
	} else {
            a := make([]int, t)
            for i := 0; i < t; i++ {
		fmt.Scan(&a[i])
                sum += a[i]
            }
	}
	fmt.Println(sum)
    }
}

4.

输入:
输入数据有多组, 每行表示一组输入数据。
每行不定有n个整数,空格隔开。(1 <= n <= 100)。

输出: 每组数据输出求和的结果

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func main() {
    sc := bufio.NewScanner(os.Stdin)
    for sc.Scan() {  //每次读入一行
        strs := strings.Split(sc.Text(), " ")  //通过空格将他们分割,并存入一个字符串切片
        var sum int
        for i := range strs {
            val, _ := strconv.Atoi(strs[i])   //将字符串转换为int
            sum += val
        }
        fmt.Println(sum)
    }
}

字符串排序

1.

输入:
输入有两行,第一行n
第二行是n个空格隔开的字符串

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

func main(){
    sc := bufio.NewScanner(os.Stdin)
    sc.Scan()
    for sc.Scan(){
        strs := strings.Split(sc.Text(), " ")
        sort.Strings(strs)  //排序
        fmt.Println(strings.Join(strs," "))  //将切片连接成字符串
    }
}

2.

输入:
多个测试用例,每个测试用例一行。
每行通过空格隔开,有n个字符串,n<100

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

func main(){
    sc := bufio.NewScanner(os.Stdin)
    for sc.Scan(){
        strs := strings.Split(sc.Text()," ")
        sort.Strings(strs)
        fmt.Println(strings.Join(strs, " "))
    }
}

3.

输入:
多个测试用例,每个测试用例一行。
每行通过,隔开,有n个字符串,n<100

输出:
对于每组用例输出一行排序后的字符串,用','隔开,无结尾空格

func main(){
    sc := bufio.NewScanner(os.Stdin)
    for sc.Scan(){
        strs := strings.Split(sc.Text(),",")
        sort.Strings(strs)
        fmt.Println(strings.Join(strs, ","))
    }
}