牛客網做算法題時go語言讀取標準輸入的方法

最近由於面試需要使用牛客網的 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)
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章