Go语言输入输出题型笔记

ACM

1. 无输入输出固定字符串 (PIO1)

package main

import "fmt"

func main() {
    fmt.Println("Hello Nowcoder!Hello Nowcoder!")
}

知识点:直接使用fmt.Println输出固定字符串

2. 单组输入输出 (PIO2)

package main

import "fmt"

func main() {
    var a, b int
    fmt.Scan(&a, &b)
    fmt.Println(a + b)
}

知识点:使用fmt.Scan读取单行整数输入

3. 多组输入EOF形式 (PIO3)

package main

import "fmt"

func main() {
    var a, b int
    for {
        _, err := fmt.Scan(&a, &b)
        if err != nil {
            break
        }
        fmt.Println(a + b)
    }
}

知识点:使用循环读取直到EOF,通过错误检测终止

4. T组形式多组输入 (PIO4)

package main

import "fmt"

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

知识点:先读取组数T,再循环处理每组数据

5. 零尾模式输入 (PIO5)

package main

import "fmt"

func main() {
    var a, b int
    for {
        fmt.Scan(&a, &b)
        if a == 0 && b == 0 {
            break
        }
        fmt.Println(a + b)
    }
}

知识点:通过特定终止条件(0 0)结束输入

6. 一维数组求和 (PIO6)

package main

import (
    "fmt"
    "strconv"
)

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

知识点:读取数组长度后逐个读取元素求和

7. 多组一维数组 (PIO7)

package main

import "fmt"

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

知识点:嵌套循环处理多组数组输入

8. 二维数组求和 (PIO8)

package main

import "fmt"

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

知识点:双重循环读取二维数组元素

9. 字符串反转 (PIO10)

package main

import (
    "fmt"
)

func main() {
    var n int
    fmt.Scan(&n)
    
    var s string
    fmt.Scan(&s)
    
    for i := len(s) - 1; i >= 0; i-- {
        fmt.Print(string(s[i]))
    }
    fmt.Println()
}

知识点:字符串反转通过索引倒序读取

10. 保留小数位数 (PIO14)

package main

import (
    "fmt"
    "math"
)

func main() {
    var n float64
    fmt.Scan(&n)
    
    // 四舍五入到3位小数
    rounded := math.Round(n*1000) / 1000
    
    fmt.Printf("%.3f\n", rounded)
}

知识点:使用math.Round和格式化输出控制精度

11. 补充前导零 (PIO15)

package main

import (
    "fmt"
)

func main() {
    var n int
    fmt.Scan(&n)
    
    fmt.Printf("%09d\n", n)
}

知识点:使用格式化输出%09d补充前导零

12. 条件判断输出 (PIO16)

package main

import (
    "fmt"
)

func main() {
    var n int
    fmt.Scan(&n)
    
    if n%2 == 1 {
        fmt.Println("YES")
    } else {
        fmt.Println("NO")
    }
}

知识点:基本条件判断输出

13. 浮点精度处理 (PIO17)

package main

import (
    "fmt"
    "math"
)

func main() {
    var r int
    fmt.Scan(&r)
    
    area := math.Pi * float64(r*r)
    fmt.Printf("%.5f\n", area)
}

知识点:使用math.Pi计算圆面积,格式化输出控制精度

14. 构造数组满足和 (PIO18)

package main

import (
    "fmt"
)

func main() {
    var n, m int
    fmt.Scan(&n, &m)
    
    // 构造等差数组
    for i := 0; i < n-1; i++ {
        fmt.Print("1 ")
        m--
    }
    fmt.Println(m)
}

知识点:构造满足条件的数组(前n-1个元素为1,最后一个元素为剩余值)

15. 多组字符串处理 (PIO11)

package main

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

func main() {
    var t int
    fmt.Scan(&t)
    
    scanner := bufio.NewScanner(os.Stdin)
    for i := 0; i < t; i++ {
        scanner.Scan()
        s := scanner.Text()
        reversed := reverseString(s)
        fmt.Println(reversed)
    }
}

func reverseString(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

知识点:使用bufio.Scanner高效读取多行输入

16. 二维字符数组处理 (PIO12)

package main

import (
    "fmt"
)

func main() {
    var n, m int
    fmt.Scan(&n, &m)
    
    grid := make([][]byte, n)
    for i := 0; i < n; i++ {
        var row string
        fmt.Scan(&row)
        grid[i] = []byte(row)
    }
    
    // 反转行和列
    for i := n - 1; i >= 0; i-- {
        for j := m - 1; j >= 0; j-- {
            fmt.Print(string(grid[i][j]))
        }
        fmt.Println()
    }
}

知识点:二维字符数组的读取和倒序输出

17. 带空格字符串处理 (PIO13)

package main

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

func main() {
    var t int
    fmt.Scan(&t)
    
    scanner := bufio.NewScanner(os.Stdin)
    for i := 0; i < t; i++ {
        scanner.Scan()
        s := strings.ReplaceAll(scanner.Text(), " ", "")
        reversed := reverseString(s)
        fmt.Println(reversed)
    }
}

func reverseString(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

知识点:处理带空格字符串时使用strings.ReplaceAll删除空格

18. 多组二维数组处理 (PIO9)

package main

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

func main() {
    var t int
    fmt.Scan(&t)
    
    scanner := bufio.NewScanner(os.Stdin)
    for i := 0; i < t; i++ {
        scanner.Scan()
        parts := strings.Split(scanner.Text(), " ")
        n, _ := strconv.Atoi(parts[0])
        m, _ := strconv.Atoi(parts[1])
        
        sum := 0
        for j := 0; j < n; j++ {
            scanner.Scan()
            nums := strings.Split(scanner.Text(), " ")
            for _, numStr := range nums {
                num, _ := strconv.Atoi(numStr)
                sum += num
            }
        }
        fmt.Println(sum)
    }
}

知识点:使用bufio.Scanner高效处理多组二维数组输入

Golang 文章被收录于专栏

学习Go语言路上遇到的题型知识点记录,日常编程学习记录

全部评论

相关推荐

no_pessimi...:感觉字节都是hr捞人面试的
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务