题解 | #汽水瓶#
汽水瓶
https://www.nowcoder.com/practice/fe298c55694f4ed39e256170ff2c205f
package main import "fmt" func main() { var n int for { _, err := fmt.Scan(&n) if err != nil || n == 0 { break } count := drinkSodas(n) fmt.Println(count) } } func drinkSodas(n int) int { count := 0 for n >= 3 { // 兑换汽水 exchange := n / 3 count += exchange // 剩余空瓶数 remaining := n % 3 // 新的空瓶数为兑换得到的汽水数加上剩余空瓶数 n = exchange + remaining } // 如果还有两个空瓶,可以向老板借一个再喝一瓶 if n == 2 { count++ } return count }
段代码中,我们首先通过循环读取输入的数据,直到遇到输入为0或者发生错误时退出循环。在每次循环中,调用drinkSodas
函数来计算最多可以喝到的汽水瓶数,并将结果打印输出。
在drinkSodas
函数中,我们使用一个循环来模拟喝汽水的过程。当手上的空瓶数大于等于3时,我们可以将它们兑换成汽水,并更新手上的空瓶数。如果剩余的空瓶数为2,我们可以向老板借一个空瓶再喝一瓶汽水。最后返回喝到的汽水瓶数。
注意:在Go语言中,fmt.Scan
函数用于从标准输入读取数据,并将其存储到指定的变量中。在这里,我们使用_, err := fmt.Scan(&n)
来读取输入的整数,并忽略掉返回的第一个值(因为我们不需要它),只关心可能发生的错误。