最近由于面试需要使用牛客网的 OJ 系统,感觉特别不习惯。之前都是在 leetcode 上做算法题,所以对需要自己处理输入输出的方式特别不熟悉,捣鼓了好一小会。这里做一个小记录,也是一个分享吧。
算法题demo:a+b
每行包含两个整数a和b
对于每行输入对应输出一行a和b的和
输入
1 5
输出
6
方法一:使用fmt.Scan按空格读取
fmt.Scan 只识别空格,同时会将换行判断为空格,做法如下(牛客官网示例)
package main
import (
"fmt"
"io"
)
func main() {
var a, b int
for {
_, err := fmt.Scan(&a, &b)
if err == io.EOF {
break
}
fmt.Println(a + b)
}
}
方法二:使用bufio.NewScanner(os.Stdin)按行读取
对于有的算法题,使用 fmt.Scan 按空格读取是无法处理输入数据的。比方说输入为 “a s d f-q w e r”,"-" 的左右部分内容是一组输入,这需要我们去掉"-"。这时我们就可以使用 bufio.NewScanner(os.Stdin) 按行读取。还是以 ‘a+b’ 举例,如下:
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
var a, b int
input := bufio.NewScanner(os.Stdin)
for input.Scan() {
a, _ = strconv.Atoi(strings.Split(input.Text(), " ")[0])
b, _ = strconv.Atoi(strings.Split(input.Text(), " ")[1])
fmt.Println(a+b)
}
}