【JavaScript——牛客网算法No.HJ22】汽水瓶(三个空汽水瓶可以换一瓶汽水,问最多可以换多少瓶汽水喝)

  • @No.HJ22 汽水瓶

  • @problem description:
    有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
  • @input description:
    输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
  • @output description:
    对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

  • 示例

  • @input:
    3
    10
    81
    0
  • @output:
    1
    5
    40

今天写完这个算法打开排行榜一看,欧呦?居然是第一!!!❀
果然代码才能使我真正的快乐,哈哈哈嗝~
在这里插入图片描述

// 方法一:
while(num = readline()){
    
    
    console.log(~~(num / 2))
}
算法分析:

没错,真一行,我感觉这应该是最简单的方案了,挑战全网没有之一
最后结果总是等于:空瓶子数除以2的结果向下取整
其实我第一次解题用的是第二种写法,这个方案是我分析每次代码的结果后总结出来的,我真是个小机灵鬼~
每次结果都跟最开始的空瓶子数的一半有关???嗯??
也对,每次兑换都是先减去三个,然后再加上一个,也就等价于两个空瓶子可以喝一瓶


Code_Zevin_J —— 2020-08-26 21:29:55

再贴出来我第一次的代码吧,再正常不过的逻辑(最笨的算法,呜呜呜~)

// 方法二:
while(num = readline()){
    
    
    var result = 0;
    while(num > 2){
    
    
        result += ~~(num / 3)
        num = num % 3 + ~~(num / 3)
    }
    console.log(num === 2 ? result + 1 : result)
}
算法分析:

这道实际应用题的核心就是一个while循环:
当剩余空瓶子数量(num)大于2的时候就继续执行循环:
每次循环都先兑换一波空瓶子:~~(num / 3) ,空瓶子数除以3后结果向下取整,结果累加到result中;
现在剩下的空瓶子数量就包括两部分:兑换剩下的空瓶子和兑换来的阔落喝掉后新产生的;
跳出循环后,在输出的时候还需要注意最后一个条件:
剩余空瓶子数恰巧有两个时,居然可以和老板借一个空瓶子,哈哈,老板好人~
所以一个三目运算符搞定~


Code_Zevin_J —— 2020-08-26 21:29:55

猜你喜欢

转载自blog.csdn.net/JZevin/article/details/108247900
今日推荐