模拟+递归思路
这题其实我看到了楼上一个大佬的最简单解法,通过逻辑推理,只要把初始空瓶除以二即可,真可以说是太秀了。
但愚笨的我还是按照标准的模拟思路来接题吧。
其实这题最难的并非逻辑,而是把这个逻辑转化成编程语言,题目的逻辑就在题目里,这时候我们更像是做一份翻译工作。
逻辑分析
我们不妨就按题目假设的例子来进行分析,一开始是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); } } }