一道脑洞大开的计算问题

2021-01-29 14:54:11 +08:00
 lili1397
一个小店做活动,啤酒促销。
啤酒一瓶一块钱,两个空瓶可以再换一瓶。
问题:假如你特能喝,5 块钱喝到最后,能喝几瓶?
如果你还在扳手指头,那 10 块呢,最终能喝几瓶?

通常我们用这样的问题,来训练左脑的逻辑思维。
如果你会写代码,应该会觉得题目很简单,一个 function 搞定。
1647 次点击
所在节点    奇思妙想
4 条回复
teddyss
2021-01-30 10:34:51 +08:00
private static int num=0; //可以喝的啤酒数
private static int pingzi=0;//瓶子数

public static void main(String[] args) {
// Scanner scanner = new Scanner(System.in);
// System.out.println("要买多少钱的?");
// int money = scanner.nextInt();
int money = 2;
System.out.println(money+"元可以喝"+calc(money)+"瓶啤酒");
}

private static int calc(int money){
if(money > 0){
money--; // 买一瓶钱就要减去 1 元
num++; // 得到的啤酒数加 1
pingzi++; // 得到的瓶子数加 1
if(pingzi==2){ // 如果瓶子数等于 2 的话,可以多兑换一瓶,兑换之后还多了一个瓶子
num++; pingzi=1;
}
calc(money); //递归计算
}
return num;
}
imzhoukunqiang
2021-02-01 10:53:15 +08:00
2n-1
no1xsyzy
2021-02-01 14:08:43 +08:00
话说以前那个可以借一个空瓶还一个空瓶的话就是简单代数问题:
2 * 空瓶 = 1 净重 * 水 + 1 * 空瓶 = 1 RMB
1 净重 * 水 = 0.5 RMB

不能借瓶子的话其实是个动规问题,但猜想可能有解析解。
lili1397
2021-02-01 15:59:57 +08:00
条条道路通罗马,每个人的思考路径都很独特。
这个问题跟那个著名的 1+2+3+....+100=?
属于一类,找到规律就好办了。
小学,初中以下,正确解答大约需要三分钟。
心算,通常会陷入一种奇妙的循环。打个草稿的话,会快很多。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/749574

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX