汽水瓶 Java标准解法

汽水瓶

http://www.nowcoder.com/questionTerminal/fe298c55694f4ed39e256170ff2c205f

模拟+递归思路

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

逻辑分析

我们不妨就按题目假设的例子来进行分析,一开始是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);
            }
        }
}
全部评论
这里有点问题,应该是while(n/3>0||n==0)。否则输入为2时喝不到。
5 回复 分享
发布于 2021-03-11 17:08
循环条件应该是while(n/3>0||n==2),不然输入2时就输出0了;
2 回复 分享
发布于 2021-05-11 15:25
n=2的情况为什么会没注意到
点赞 回复 分享
发布于 2022-02-25 19:06
应该加一个n=1时break跳出循环的条件吧!
点赞 回复 分享
发布于 2023-05-09 19:17 陕西

相关推荐

object3:开始给部分🌸孝子上人生第一课了
点赞 评论 收藏
分享
评论
45
5
分享
牛客网
牛客企业服务