本帖最后由 caixingke 于 2014-10-8 02:05 编辑
昨天也发了这道题给我.
我一开分析呢, 是从数据结构上来分析, 这是一棵完全三叉树.
但说实话, 二叉树的东西我都忘了不少, 所以也懒得去琢磨三叉树, 所以我换了个思路.
我喜欢用递归(递归本质是一个栈), 所以简单地用以下的几行代码简单解决:- public static int buyBeverageNum(int numPerson){
- if (numPerson<=3){
- return numPerson;
- } else {
- return 2 + buyBeverageNum(numPerson-3);
- }
- }
复制代码
呵呵, 里头只有一个if--else--判断, 其它都没有. 代码量超少.:lol
其思路是:
如果是3个人或3个以下的人买, 那么有多少人就买多少瓶;
即使如果有3个人, 还会再奖一瓶, 但是这一瓶退不回也没人要, 这3个人仍然还是要消费3瓶.
如果是超过3个人买, 我们把人分成多个3人组;
那么最前买的那3个人, 买了3瓶, 但会奖一瓶, 他们可以把这一瓶卖给后面的人.
即, 实际上, 这3个人, 只花了2瓶的钱.
而接下来的一组, 其会向前一组买一瓶, 再向店家买两瓶, 店家会奖一瓶, 他们把这一瓶卖给后一组,
即, 这一组, 总共也只花了2瓶的钱.
这样一组一组如此进行下去, 直到最后一组.
不管最后一组有没有3个人, 总之不会超过3个人, 即, 有多少人就买多少瓶.
这是一个简单的思路. 代码还要完善下, 比如添加一些代码, 判断下参数的合法化, 比如如果参数小于0, 那抛出异常之类.
|