某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)
小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。
数据范围:输入的正整数满足

注意:本题存在多组输入。输入的 0 表示输入结束,并不用输出结果。

输入描述:

输入文件最多包含 10 组测试数据,每个数据占一行,仅包含一个正整数 n( 1<=n<=100 ),表示小张手上的空汽水瓶数。n=0 表示输入结束,你的程序不应当处理这一行。


输出描述:

对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。


输入例子1:
3
10
81
0

输出例子1:
1
5
40

例子说明1:
样例 1 解释:用三个空瓶换一瓶汽水,剩一个空瓶无法继续交换
样例 2 解释:用九个空瓶换三瓶汽水,剩四个空瓶再用三个空瓶换一瓶汽水,剩两个空瓶,向老板借一个空瓶再用三个空瓶换一瓶汽水喝完得一个空瓶还给老板  

解题思路:使用递归的思路进行解题,一个计数变量get用于记录小张喝的汽水数,init初始空瓶除3获取喝完汽水之后获得的空瓶,然后加上初始空瓶取模3获取兑换完汽水之后剩余的空瓶数,得出下一次剩余的总空瓶数。直到最后空瓶数等于2时,此时可以向老板借一个空瓶换一瓶汽水,然后再还给老板一个空瓶。如果最后空瓶数小于2,则不可继续换汽水。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()){
            int init = in.nextInt();
            int get = 0;
            if(init==0){
                return;
            }
            get=calGet(init,get);
            System.out.println(get);
        }
    }
    public static int calGet(int init,int get){
        if(init>2){
            get=init/3+get;
            init=init%3+init/3;
            return calGet(init,get);
        }else if(init==2){
            return ++get;
        }else{
            return get;
        }
    }
}

如果有两个空瓶,可以换一瓶汽水,然后还给老板,相当于两个空瓶可以换一瓶汽水,直接拿总数除以2即可得出可以喝到的汽水数。

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()){
            int a = in.nextInt();
            if(a!=0){
                System.out.println(a/2);
            }
        }
    }
}