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语言路上遇到的题型知识点记录,日常编程学习记录