关于三个瓶盖换一瓶汽水的问题的思考

举报
王小贰 发表于 2021/01/29 17:48:37 2021/01/29
【摘要】 今天在朋友圈看到这样一个问题一毛钱一个桃,三个核换一个桃,拿1块钱最多能吃几个桃感觉脑海中忽然,某根神经被挑动了一下。第一次看到这个题目的时候,应该是小学二三年级,学数学的时候,那时候没啥玩具,父亲大人就给我买了一本奥数。当时回答,应该是说的,14,然后答案确实15,很有意思。来看下过程10 剩10个核3 剩4个核(第一次的1加上这里的3)1 剩2个核(第二次的1加上这里的1)1 剩0个核 ...

今天在朋友圈看到这样一个问题

一毛钱一个桃,三个核换一个桃,拿1块钱最多能吃几个桃

感觉脑海中忽然,某根神经被挑动了一下。

第一次看到这个题目的时候,应该是小学二三年级,学数学的时候,那时候没啥玩具,父亲大人就给我买了一本奥数。

当时回答,应该是说的,14,然后答案确实15,很有意思。

来看下过程

10 剩10个核
3 剩4个核(第一次的1加上这里的3)
1 剩2个核(第二次的1加上这里的1)
1 剩0个核  第三次两个核+借来一个,吃了再把核还回去

所以结果就是10+3+1+1=15个。

再来说说,上次我看到这个题目,应该是大三还是大一的那一次程序设计竞赛。

当时的思路就是,模拟这个过程,来进行编码。


  1. public class Test {



  2. static int numWaterBottles(int num, int numExchange) {

  3. int temp = num, sum = num;

  4. while (temp >= numExchange) {

  5. //换一个,减去要换的数量

  6. temp -= numExchange;

  7. //总数+1

  8. ++sum;

  9. //核+1

  10. ++temp;

  11. }

  12. //如果最后剩两个核,可以借一个吃了还回去

  13. return temp == 2 ? ++sum:sum;

  14. }





  15. public static void main(String[] args) {

  16. System.out.println(numWaterBottles(10, 3));

  17. }

  18. }

 然后今天看到这个,突然觉得,这应该就是一个数学问题,应该有公式,于是去力扣上看了看,

好家伙,公式是有了。但是,好像这和我想的不太一样。

如果,n个空瓶子,可以换一瓶酒。那么,是不是相当于,我每买n-1瓶酒就相当于买了 n瓶?
于是推论,每一瓶酒的价值,应该是(n-1)/n,
所以最后结果应该是,第一次有的数量num,除以这个价值,然后结果向下取整就好了。
这样按照每瓶酒的价值来算,就避开了中间的兑换过程。

我们开头说到的桃子问题,10个,三个核换一个,就可以这样算,10/((3-1)/3) = 15 ,就很简单。

当然因为公式的原因,为了避免程序出现除0异常。
我们写代码得判断,是不是n=1。那样的话,就是可以无限换,此题解就是无穷大。

代码也很简单,就一个输出就能解决问题。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。