最近由於面試需要使用牛客網的 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)
}
}