Golang在ACM模式下的刷题指南,只用一个函数处理所有情景下的输入问题,一招鲜吃遍天!

受之前用C和C++刷题的影响,所有输入我都喜欢用scanf处理,恰恰golang也有scanf函数,所以说golang也可以像C和C++一样完美处理所有情景下的输入,可谓是一招鲜吃遍天!

1. fmt.Scanf

首先来介绍一下fmt包的Scanf函数。

这个函数的第一个参数是一个指定读入数据格式的字符串,用“%+一个小写字母”来指定读入的数据格式以及给数据占位,最常用的是用%d表示读入int类型数据,用%s读入字符串,用%c读入一个字符。从第二个参数开始就是读入数据后保存的变量,务必要用引用的方式,比如&num,变量数要与第一个参数字符串中的占位符%的数目保持一致。

Scanf函数的返回值有两个,第一个是读入的数据数目,一般在刷题时不会用到它,第二个返回值是err,这个err非常有用,可以帮助我们判断是否读完所有的输入。

一个Scanf函数的示例:

n,err:=fmt.Scanf("%d%d",&a,&b)

示例中,n就是读到的数据数目,为2,err就是返回的错误,“%d%d”表示读入两个int类型数据,按顺序保存到a、b变量中,注意a、b变量是引用的格式。

 上图是C和C++中scanf格式符对应的数据类型,务必要注意,在Go语言中字符串也是要用引用的

2. 十个场景搞懂Golang在ACM模式下的输入

简单了解Scanf函数后我们就可以针对各种情况来处理输入了。

2.1 行数不固定,每行有固定数目的数据

输入描述:

输入包括两个正整数a,b(1 <= a, b <= 1000),输入数据包括多组。

输出描述:

输出a+b的结果

输入示例:

1 5
10 20

输出示例:

6

30

该题目要求很简单,每行两个数据,但是行数不固定,我们需要自行判断是否读入完全部输入数据。其实判断是否读入完全部数据很简单,就是利用Scanf返回的err,当读入完全部数据后err!=nil。

仅供参考的AC代码如下:

package main
import (
    "fmt"
)

func main(){
    var a,b int
    for {
        _,err:=fmt.Scanf("%d%d",&a,&b);
        if err!=nil{
            return
        }
        fmt.Println(a+b)
    }
}

2.2 第一行给定行数,第二行开始每行数据数目固定

输入描述:
        输入第一行包括一个数据组数t (1 <= t <= 100)
        接下来每行包括两个正整数a,b ( 1 <-a, b <= 1000)


输出描述:
        输出a+b的结果


输入示例:
2

1 5

10 2

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SwithunH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值