import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
         bottle(in);
    }
    public static void bottle(Scanner in) {
        int n = 0;
        while (in.hasNextInt()) {
            n = in.nextInt();
            if(n==0){
                continue;
            }
            System.out.println(sum(n));
        }
    }
    public static int sum(int n) {//n就代表空瓶子
        if (n == 1) {return 0;}
        if (n == 2) {return 1;}
        int sum = n / 3;//水
        int l = n % 3;//瓶 如果剩下2瓶,那么可以借一瓶,喝完后再还回去res+1
        int res = 0;
        boolean flag = false;
        if (l == 2) {
            res += 1;
            flag = true;//借据
        }
        int tota = sum + res;//这是总水数
        int totaBottle = flag?tota-1:tota+l;//这是总瓶数,如果有借据得减一个瓶子.tota+l是加上了前面余下的1
        return tota + sum(totaBottle);//最后递归调用时的参数就是兑换的水+剩余的空瓶子
    }
}

我太难了,使用的递归,本来头脑就不灵光,这个方法在idea上测试了好久,测试案例不通过的一个个拉出来打断点。终于完善了。我这个思想是完全没问题的,而且很清晰。此题的关键是分清楚总水数和总瓶数,两个一定不能搞混了。还有最坑的一点是题目要求输入10个范围的一组数据,我以为这个10就是输入的个数判断限制。但是实际上输入三组数据,再往下就不走了。结果我就没考虑10的这个限制,直接输入一个数据,算出一个结果。没想到系统就是这样判定的,真滴坑。