题解 | #汽水瓶#

汽水瓶

http://www.nowcoder.com/practice/fe298c55694f4ed39e256170ff2c205f

import java.util.Scanner;

/**
 * @author hll[yellowdradra@foxmail.com]
 * @description 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。
 * 小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,
 * 喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。
 * 然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。
 * 如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
 * @date 2021-05-25 23:10
 **/
public class Main {
    public static void main(String[] args) {
        final Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            if (n == 0) {
                return;
            }
            int exchanges = 0;
            while (n > 2) {
                // 当前瓶数除3得到的商是兑换的瓶数
                int remainder = n % 3;
                // 当前瓶数模3得到的是未能参与兑换的瓶数
                int quotient = n / 3;
                // 兑换到的瓶数累加
                exchanges += quotient;
                // 兑换到的瓶数 + 未能参与兑换的瓶数 = 下一轮参与兑换的瓶数
                n = remainder + quotient;
            }
            // 如果最后一轮剩下两个瓶子 则使用借一法(一看到这个题目就想到了小学奥数题。。)
            // 则兑换到的瓶数加一 
            // 如果你剩下一瓶 你可以把这瓶子借给剩两瓶的同学让他兑换一瓶 然后要求分三分之一的汽水
            // 如果有无数个剩下两瓶的同学 那么你将轻而易举完成资本的原始积累 /doge 
            System.out.println(n == 2 ? exchanges + 1 : exchanges);            
        }
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务