✅有一堆桃子,猴子第一天吃了一半加一个,第二天又吃了一半加一个,... ,到第10天时剩下一个桃子,问这原来有多少个?

典型回答

有一堆桃子,猴子第一天吃了一半加一个,第二天又吃了一半加一个,第三天又吃了一半加一个,以此类推,到第10天时只剩下一个桃子,问这堆桃子原来有多少个?

这是一道经典的编程题目。

猴子每天都吃了剩下桃子的一半再加一个。如果我们从第10天开始反推到第1天,计算过程如下:

  • 第10天:剩下1个桃子。
  • 第9天:第10天之前,桃子的数量是(1 + 1)* 2 = 4个。
  • 第8天:第9天之前,桃子的数量是(4 + 1)* 2 = 10个。
  • 第7天:第8天之前,桃子的数量是(10 + 1)* 2 = 22个。
  • 第6天:第7天之前,桃子的数量是(22 + 1)* 2 = 46个。
  • 第5天:第6天之前,桃子的数量是(46 + 1)* 2 = 94个。
  • 第4天:第5天之前,桃子的数量是(94 + 1)* 2 = 190个。
  • 第3天:第4天之前,桃子的数量是(190 + 1)* 2 = 382个。
  • 第2天:第3天之前,桃子的数量是(382 + 1)* 2 = 766个。
  • 第1天:第2天之前,桃子的数量是(766 + 1)* 2 = 1534个。

因此,最开始这堆桃子共有1534个。

那么代码如下:

public static void main(String[] args) {
    int total = 1;
    for(int i=10; i>1; i--){
        total = (total+1)<<1;
    }
    System.out.println(total);
}

这里的<< 是向左移一位,在二进制中向左移一位,在十进制中就是*2的意思。

最终得到1534

原文: https://www.yuque.com/hollis666/xkm7k3/ah9x72sxk3krltag