失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 关于矿泉水空瓶子和瓶盖兑换矿泉水的问题解决算法

关于矿泉水空瓶子和瓶盖兑换矿泉水的问题解决算法

时间:2020-10-19 07:29:36

相关推荐

关于矿泉水空瓶子和瓶盖兑换矿泉水的问题解决算法

问题大概描述:矿泉水1块钱1瓶,喝完以后,2个空瓶子可以换一瓶新矿泉水,4个瓶盖也可以换一瓶新矿泉水。问:花10块钱最后最多能得多少瓶矿泉水。

钱不是问题,主要是考虑刚开始能买多少瓶矿泉水,这里是10瓶,既然写程序,就n瓶吧。

大致思路如下:

先把n个矿泉水全部拆分成空瓶和盖子,就是当前拥有的所有的空瓶和盖子。

可以用while循环,结束条件是(经过一轮瓶子和瓶盖的兑换活动后)当前的兑换后的所有瓶盖和瓶子都不足以再次兑换新矿泉水。

循环:1.瓶盖和空瓶用来兑换矿泉水

2.先用瓶盖兑换m1个矿泉水

3.再用空瓶兑换m2个矿泉水

4.整理当前拥有所有的瓶盖数,空瓶数,以及累积的矿泉水总数:矿泉水总数+m1+m2,瓶盖总数 - m1*4 + m1+m2 ,空瓶总数 - m2*2 +m1+m2;

代码如下,输入初始啤酒数目,返回最终数目。

以下是while循环解决方法:

题中的beer是指的啤酒,矿泉水啤酒都一样。

int maxBox(int beerNum){int allBox = beerNum;int allGai = beerNum;int allBeer = beerNum;while(allBox >= 2 || allGai >= 4){int x = allBox % 2;int y = (allBox - x) / 2;int a = allGai % 4;int b = (allGai - a) / 4;allBox = x + y + b;allGai = a + b + y;allBeer += y + b;}return allBeer;}

还要一个递归解决方法,其实思维上来看也不算递归,就是while循环的一个变形,刚好研究递归,就顺便写着玩玩。

int maxBox_recursion(int allBox,int allGai,int allBeer){if(allBox < 2 && allGai < 4){return allBeer;}else{int x = allBox % 2;int y = (allBox - x) / 2;int a = allGai % 4;int b = (allGai - a) / 4;allBox = x + y + b;allGai = a + b + y;allBeer += y + b;return maxBox_recursion(allBox,allGai,allBeer);}}

如果觉得《关于矿泉水空瓶子和瓶盖兑换矿泉水的问题解决算法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。