一行代码搞定,我又可以愉快地“喝酒”了

喝酒

http://www.nowcoder.com/practice/650993dec6284a47856bc49075c6acfe

(i, j, k)表示当前喝了i瓶,有j个瓶身,k个瓶盖的情况下能够喝几瓶酒

当买了1瓶的情况下: (1,1,1)=1
当买了2瓶的情况下:(1+1, 1+1, 1+1)=(2, 2, 2)=(3, 1, 3)=3
当买了3瓶的情况下:(2+1, 2+1, 2+1)= (3+1, 1+1, 3+1)=(4, 2, 4)=(5, 1, 5)=(6,2,2)=(7,1,3)=7
通过 归纳法 进行类推


假设买了i瓶酒时, 总共能喝到 x 瓶, 且只剩下1个瓶身,3个瓶盖。当前情况下可以表示为 (x,1,3)=x
则买了i+1瓶酒的情况下,可表示为(x+1,1+1, 3+1)=(x+1, 2, 4)=(x+2, 1, 5)=(x+3, 2, 2)=(x+4, 1, 3)=x+4
可见当剩下1个瓶身,3个瓶盖时,再买一瓶酒能够多喝4瓶

因此,除了买1瓶时需要特殊考虑之外,从买第2瓶开始就是一个相差为4的等差数列

代码如下:

    public int countWine (int m, int n) {
        return n/m==1?1:(n/m-1)*4-1;
    }
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务