模拟+递归思路

这题其实我看到了楼上一个大佬的最简单解法,通过逻辑推理,只要把初始空瓶除以二即可,真可以说是太秀了。
但愚笨的我还是按照标准的模拟思路来接题吧。
其实这题最难的并非逻辑,而是把这个逻辑转化成编程语言,题目的逻辑就在题目里,这时候我们更像是做一份翻译工作。

逻辑分析

我们不妨就按题目假设的例子来进行分析,一开始是10个空瓶子,换了10/3=3瓶,之后这三瓶又加上10%3=1瓶,一共4瓶。这4瓶我们又去换,就是又一次整除3的过程,换了4/3=1瓶,再加上4%3=1瓶。此时还有2瓶,先不考虑去找老板借,我们不难发现,之前我们在做的是一个重复过程,即整除3以后加上对3取余,然后再整除3加上对三取余。而这一循环过程的次数我们不得而知,由空瓶子的多少决定,我们可以知道的是这个循环的出口条件,那就是无法对3进行整除,换种说法就是小于3的时候.这样不经意间,你已经写好了一个while循环表达式了。

while(n/3>0){
                    count+=n/3;
                    n=n/3+n%3;
}

这时我们只要加上判断,当n=2的时候给他加1,就是老板借那一瓶,最后对3进行一次整除,结果就出来了,完整的代码如下:

import java.util.*;
public class Main {
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            while(!sc.hasNext("0")){
                int n = sc.nextInt();
                int count = 0;
                while(n/3>0){
                    count+=n/3;
                    n=n/3+n%3;
                    if(n==2){
                        n=n+1;
                    }
                }
                System.out.println(count);
            }
        }
}