题解 | #汽水瓶#
汽水瓶
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); } } }