免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: covisd
打印 上一主题 下一主题

一道关于蜗牛爬绳子的题目。 [复制链接]

论坛徽章:
0
51 [报告]
发表于 2007-10-06 18:07 |只看该作者
>>woniu_pos *= ( day / day - 1);   

你的程序是错误的,这样算出来的蜗牛位置始终为0


原帖由 2eye 于 2007-10-6 18:04 发表


请看我的初始化,我是从第1天拉伸以后循环的,蜗牛位置我初始化为2.0;
你可以在循环中检测以下蜗牛位置和绳子长度,你会发现蜗牛爬到1半是根本不可能的,实际情况是绳长达到10^7后,蜗牛才爬几万米,相差 ...

论坛徽章:
0
52 [报告]
发表于 2007-10-06 18:14 |只看该作者
对不起贴错了,是
        woniu_pos *= ( day / (day - 1.0));                //拉长绳子后调整蜗牛所在位置
JeffreyPei 该用户已被删除
53 [报告]
发表于 2007-10-06 18:21 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
JeffreyPei 该用户已被删除
54 [报告]
发表于 2007-10-06 18:43 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
55 [报告]
发表于 2007-10-06 18:57 |只看该作者
呵呵,先前说蜗牛不能爬到终点是错的,看了8楼的解答后,再想了想可以用这个方法解这个问题:

设绳长为L_n,蜗牛爬过的距离为X_n;因为绳子是均匀拉伸,所以
1、拉伸前和拉伸后 X_n / L_n这个比值是不会改变的;
2、蜗牛白天的向前爬行会使这个比值增大,只要这个比值能够=1,就能爬完整条绳子。
3、每天爬1米,第n天早晨的绳长为1000n,那么第n天向前爬过的比例为  1/1000n
综合以上三点,第n天爬过的比例为:

Xn / Ln = 1/1000 + 1/2000 + 1/3000 + ...... + 1/1000n = Sigma(1/1000n)
而这个级数发散,肯定会有一天 >= 1,所以肯定能爬完。

论坛徽章:
0
56 [报告]
发表于 2007-10-06 19:25 |只看该作者
第一个白天:         蜗牛爬 1 米
第一个黑夜:         绳子增长1000/1000=1倍
蜗牛额外前进         已前进的1米 × 1倍 = 1 米
蜗牛累计前进         1 + 1 = 2 米
此时绳长             1000+1000=2000米
此时蜗牛距离绳子中心 2000/2 -2 =998 米

第二个白天:         蜗牛爬 1 米
蜗牛累计前进         2 + 1 = 3 米
第二个黑夜:         绳子增长1000/2000=0.5 倍
蜗牛额外前进         3 × 0.5  = 1.5  米
蜗牛累计前进         3 + 1.5 = 4.5  米
此时绳长             2000 +1000=3000米
此时蜗牛距离绳子中心 3000/2 -4.5 =1495.5 米

第三个白天:         蜗牛爬 1 米
蜗牛累计前进         4.5 + 1 = 5.5 米
第三个黑夜:         绳子增长1000/3000=0.33 倍
蜗牛额外前进         5.5 × 0.33  = 1.83  米
蜗牛累计前进         4.5 + 1.83  = 6.33  米
此时绳长             3000 +1000=4000米
此时蜗牛距离绳子中心 4000/2 -6.33  =1993.67 米


可见,蜗牛距离绳子的中心越来越远,它根本无法逾越绳子的中心这个转折点,因此,蜗牛永远爬不到尽头。


换个方式来考虑:
绳子每天增长的速度(1000)米远远大于蜗牛爬行的速度,可以认为,绳子的长度很快趋向于无穷大。因为 ∞/2 = ∞ ,所以,蜗牛距离绳子的中心的距离也是趋向于无穷大。因此,蜗牛永远爬不到头。

论坛徽章:
0
57 [报告]
发表于 2007-10-06 19:30 |只看该作者
55楼的好像也有道理,
我再想想。。。

论坛徽章:
0
58 [报告]
发表于 2007-10-06 19:53 |只看该作者

回复 #56 柳拂风 的帖子

如果继续分析下去就会发现,在没有到达绳子中心之前,
蜗牛距离绳子中心的距离是一个先增长然后慢慢减少的趋
势,仅以前三个个例即得出如此结论。岂不草率?

论坛徽章:
0
59 [报告]
发表于 2007-10-06 22:38 |只看该作者
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    double totalLength = 1000.0, currentPos = 0.0, requiredDay = 1.0;
    const double step = 1.0;
    while (currentPos < totalLength)
        {
            currentPos = ( totalLength+1000.0 ) / totalLength * ( step + currentPos); //当前位置
            totalLength += 1000.0;          //绳子的总长度
            ++requiredDay;                               //蜗牛爬到顶端需要的天数
        }
        cout<<"The total days are: "<<requiredDay<<endl;
  return EXIT_SUCCESS;
}
根据前面关于级数收敛的分析,可以看出是不收敛的,所以是有解的!
呵呵,刚刚学习编程,试着写一写!!!!!

论坛徽章:
0
60 [报告]
发表于 2007-10-06 23:27 |只看该作者
day 0:  前进了0,  路程 1000
day 1:  前进了1 + 1 m,  路程 2000
day 2:  前进了1 + 1/2m, 路程 3000
day 3:  前进了1 + 1/3m, 路程 4000
...
day N: 前进了 1 + 1/N
一共前进了 N + (1 + 1/2 + 1/3 + ... 1/N)
路程变为1000(N+1)米

N + (1 + 1/2 + 1/3 + ... 1/N)  < 永远<  1000(N+1)的.
虽然N无穷大时候, 前进了无穷大, 但距离变无穷大的更快.

结论
无法到达.
(对吗)

[ 本帖最后由 思一克 于 2007-10-6 23:39 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP