牛客春招刷题训练营-2025.3.10题解
活动地址: 牛客春招刷题训练营 - 编程打卡活动
简单题 字符串最后一个单词的长度
fmt.Scan 适合读取 简单输入(以空格或换行分隔)。
fmt.Scanln 适合 读取一整行,但不能有带空格的单个变量。
fmt.Scanf 适合 格式化输入,类似 printf 的格式。
如果需要读取带空格的整行字符串,应使用 bufio.NewReader。
- 使用
for
循环不断读取标准输入中的字符串。 fmt.Scan(&s)
:从标准输入读取一个字符串并存储在变量s
中。if n == 0 { break }
:如果读取的字符数为 0,则跳出循环。fmt.Println(len(s))
:输出字符串s
的长度。
package main
import "fmt"
func main() {
var s string
for {
n, _ := fmt.Scan(&s)
if n == 0 {
break
}
}
fmt.Println(len(s))
}
中等题 明明的随机数
- 根据题目数据范围(
) 我们可以创建一个能包含该数据范围的布尔数组 a,用于记录每个数字是否出现。
- 读取 n 个整数,并将对应位置的布尔值设为 true,表示该数字出现过。
- 最后遍历 1 到 500 的数字,输出布尔数组中值为 true 的位置,即为出现过的数字。
package main
import "fmt"
func main() {
var n int
fmt.Scan(&n)
a := make([]bool, 501)
for i := 0; i < n; i++ {
var x int
fmt.Scan(&x)
a[x] = true
}
for i := 1; i <= 500; i++ {
if a[i] {
fmt.Println(i)
}
}
}
困难题 坐标移动
- 初始化坐标:初始化坐标 x 和 y 为 0。
- 读取输入:读取用户输入的一串指令,存储在字符串 s 中。
- 分割指令:使用分号 ; 分割输入字符串,得到一个指令数组 ops。
- 处理每个指令:遍历每个指令 op:如果指令长度为 0,跳过该指令。使用 strconv.Atoi 将指令的数字部分转换为整数 d。检查数字是否在 1 到 99 之间。根据指令的方向部分 (op[0]),更新坐标 x 和 y。
- 输出结果:输出最终的坐标 (x, y)。
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
x, y := 0, 0
var s string
fmt.Scanln(&s)
ops := strings.Split(s, ";")
for _, op := range ops {
if len(op) == 0 {
continue
}
d, _ := strconv.Atoi(op[1:])
if d >= 1 && d <= 99 {
switch op[0] {
case 'A':
x-=d
case 'D':
x+=d
case 'W':
y+=d
case 'S':
y-=d
}
}
// fmt.Println(d, x, y)
}
fmt.Printf("%d,%d\n", x, y)
}
#牛客春招刷题训练营##牛客创作赏金赛#牛客春招刷题训练营 文章被收录于专栏
爱丽姐真是太好了