• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

陶立

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

猴子摘桃

2016-08-31 17:05:25

问题描述:

  一只猴子摘桃子,摘累了,决定休息一下再分桃子。过了一会,来了一只猴子,把所有桃子均分成了5份,结果多了1个,就把多出的吃了,然后拿走了其中的一份;过了一会,又来了一只猴子,它并不知道前面已经有猴子来过了,也把所有桃子均分成了5分,结果多了1个,就把多出的吃了,然后拿走了其中的一份;后面的第3、4、5只猴子也是同样的道理,分5份,吃一个,拿走一份。问这堆桃子最初总共至少有几个?最后又会剩几个?

问题解析:

  第一只:5A1 + 1;

  第二只:5A2 + 1 = 4A1;

  第三只:5A3 + 1 = 4A2;

  第四只:5A4 + 1 = 4A3;

  第五只:5A5 + 1 = 4A4;

  最后剩余桃子数量:4A5。

解法分析:

  如果直接计算A1——A5,势必使计算非常复杂。

  A5 = (4A4 - 1) / 5

     = (4(4A3 - 1) / 5-1) / 5 = (16A3-9) / 25

           = (16(4A2 - 1) / 5-9)/25 = (64A2-61) / 125

           = (64(4A1 - 1) / 5-61) / 125 = (256A1-369) / 625

           >= 1;

 1 var m = 0;
 2 var arr_k = new Array();
 3 for (var k = 1; k < 10000; k++)
 4 {
 5     if ((5*k+1) % 4 == 0 && (25*k+9) % 16 == 0 && (125*k+61) % 64 == 0 && (625*k+369) % 256 == 0)
 6     {
 7         arr_k[arr_k.length] = k;
 8         m++;
 9     }
10 }
暴力解法

  仔细观察,可以发现如下关系:

  5(A2 + 1) = 4(A1 + 1);

  5(A3 + 1) = 4(A2 + 1);

  5(A4 + 1) = 4(A3 + 1);

  5(A5 + 1) = 4(A4 + 1);

  => A5 + 1 = 4(A4 + 1)/5 = ... = 44(A1 + 1)/54

  => A1最小为54 - 1 = 624,此时A5 = 255

  => 桃子最初至少有3121个,最后剩1020个。

1 var m = 0;
2 var arr_k = new Array();
3 arr_k[arr_k.length] = Math.pow(4, 4) - 1;
4 m++;
改进解法

结果相关:

  等比数列:又称几何数列。是一种特殊数列。它的特点是:从第2项起,每一项与前一项的比都是一个常数。

posted on 2016-08-31 17:02  陶立  阅读(291)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3