「青训营 X 码上掘金」

87 阅读2分钟

当青训营遇上码上掘金——主题三 寻友之旅

思考

拿到选题的时候我是这么思考的,主题三中其实是一个自变量,另一个k一旦给出那么就将不变。两种交通工具对应的是两种计算方式,那么类似追击问题,一定会有一个时候是中间值,在这之前我们选用步行x(x为时间)方法,之后用2x或者2(X1)±(X2)的办法来实现。

操作

这段时间主要学习了go语言所以就想用go来试试做一个,初步思考后认为主要难点有三个。

第一个是需要定义两个整数并且两个整数需要用户自己输入进而才能到下一个环节。

第二个是需要做一个判定,如果每次判断k/2等于0并且k/2大于等于n那么可以选择一直乘坐公交只需要起步走1的路,也就是时间是(x/2)/2...+1,如果每次(x/2)判断等于或者小于n那么选择走路也就是在该循环+1分钟。面对不同数字应该情况会多变比如:

当n等于0k等于2,那么两步就行0+1+1或者0+1*2。如果出现n等于0k等于12,那么应该((0+1)*2+1)22最近也就是5min

第三个可能会忽略的问题就是n和k默认可以一直大吗?注意到n受到k影响所以题目中说到k小于等于 100000也就是当n大于100000时系统应当报错。

代码如下(不一定对可供参考):

package main

import (
   "fmt"
)

func main() {
   var N, K int
   fmt.Print("Please input N and K:")
   fmt.Scanf("%d %d", &N, &K)
   if N < 0 || K < 0 || N > 100000 || K > 100000 {
      fmt.Println("输入错误!")
      return
   }
   min := 0
   for N != K {
      if K%2 == 0 && K/2 >= N {
         K /= 2
         min++
      } else {
         K -= 1
         min++
      }
   }
   fmt.Println("小青到小码家所需的最短时间为:", min, "min")
}
```
```