Golang OJ 输入输出
定义
- m,n为可定
- x,y为不确定
需要使用的包
- fmt -> 输出
- bufio -> IO
- os -> 接受输入
- strconv -> string转换
- strings -> string处理
常用元素
fmt.Println() ,fmt.Printf() 输出结果
bufio.NewScanner(os.Stdin) 接受来自os.Stdin的输入
bufio.ScanWords 这个对象配合bufio.Split()方法可以实现单个元素扫描,看sln5
strconv.Atoi(string) ,string转int,转int32要用stronv.ParseInt(string,10,32),输出的是int64,建议统一用int64,stronv.ParseInt(string,10,64)
strings.Split(string," ") ,把string按照“ ” 分割,注意后面的" " 有空格
单个元素
// 输入单个数字也可以用sln2 + strconv.Atoi(m)
func sln1() {
var m int
fmt.Scanln(&m)
fmt.Println(m)
}
// 输入单个str
func sln2() {
input := bufio.NewScanner(os.Stdin)
input.Scan()
m := input.Text()
fmt.Println(m)
}
一维数组
// 输入n个数字
func sln3() {
var n int
fmt.Scan(&n)
arr := make([]int, n)
for i, _ := range arr {
fmt.Scan(&arr[i])
}
fmt.Println(arr)
}
// 输入x 个数字
func sln4() {
input := bufio.NewScanner(os.Stdin)
bs := make([]byte, 2000*1024)
input.Buffer(bs, len(bs))
input.Scan()
strs := strings.Split(input.Text(), " ")
arr := make([]int, len(strs))
for i, str := range strs {
arr[i], _ = strconv.Atoi(str)
}
fmt.Println(arr)
}
二维数组
// 输入n * m 个数字
func sln5() {
input := bufio.NewScanner(os.Stdin)
bs := make([]byte, 2000*1024)
input.Buffer(bs, len(bs))
var m, n int
input.Split(bufio.ScanWords)
input.Scan()
n, _ = strconv.Atoi(input.Text())
input.Scan()
m, _ = strconv.Atoi(input.Text())
arrs := make([][]int, n)
for i := range arrs {
arrs[i] = make([]int, m)
}
for i := 0; i < n; i++ {
for j := 0; j < m; j++ {
input.Scan()
arrs[i][j], _ = strconv.Atoi(input.Text())
}
}
for _, arr := range arrs {
fmt.Println(arr)
}
}
// 输入 不定长度的 二维数组
func sln6() {
input := bufio.NewScanner(os.Stdin)
bs := make([]byte, 2000*1024)
input.Buffer(bs, len(bs))
arrs := make([][]int, 0)
for input.Scan() {
arr := make([]int, 0)
strs := strings.Split(input.Text(), " ")
if strs[0] == "" {
break
}
for _, v := range strs {
num, _ := strconv.Atoi(v)
arr = append(arr, num)
}
arrs = append(arrs, arr)
}
fmt.Println(arrs)
}