题解 | #汽水瓶#

汽水瓶

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)来读取输入的整数,并忽略掉返回的第一个值(因为我们不需要它),只关心可能发生的错误。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务