免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
101 [报告]
发表于 2007-10-10 09:25 |只看该作者
计算蜗牛已经完成的路程与总路程的比,如果这个比一直在增大,那么就有可能完成。当然这只是估算(精度问题),用来判断是否能够爬完。

  1. double l=1000,x=0,c;   //l为总长,x为已爬长度
  2. unsigned int n;
  3. while(1){
  4.    n++;
  5.    if(++x>=l){   //天黑前
  6.       printf("%u\n",n);
  7.       break;
  8.    }
  9.    c=1000/l;  //均匀增加以后的单位增量
  10.    l+=1000;   //总长增加
  11.    x+=x*c;   //爬过的距离增加
  12.    if(n%100000==0){
  13.       printf("n=%u,x/l=%f\n");
  14.    }
  15. }
复制代码


输出的结果表明,比值是不断的增大的,所以我觉得有可能爬完。只是比值增大速度相当慢,目前存在的计算机完成不了。
不知道我的方法错了没有?

论坛徽章:
0
102 [报告]
发表于 2007-10-10 09:54 |只看该作者
一天爬300M,能否完成?300可以,一米也可以

论坛徽章:
0
103 [报告]
发表于 2007-10-10 10:53 |只看该作者
把它化成相对数实际就是:第一天爬1000米中的1米,第二天爬1000米中的1/2米,第三天爬1000米中的1/3米.....第N天爬1000米中的1/N米,所以得1+1/2+1/3....+1/N>=1000,求得N值.

[ 本帖最后由 newttle 于 2007-10-10 11:06 编辑 ]

论坛徽章:
0
104 [报告]
发表于 2007-10-10 11:00 |只看该作者
看是这样,但大家想过没有,蜗牛前面的路是越来越远。

论坛徽章:
0
105 [报告]
发表于 2007-10-10 11:11 |只看该作者
正确的分析。

你用一次300米,用纸和笔就可以算出几天。一米也是一个道理

原帖由 newttle 于 2007-10-10 10:53 发表
把它化成相对数实际就是:第一天爬1000米中的1米,第二天爬1000米中的1/2米,第三天爬1000米中的1/3米.....第N天爬1000米中的1/N米,所以得1+1/2+1/3....+1/N>=1000,求得N值.

论坛徽章:
0
106 [报告]
发表于 2007-10-10 11:13 |只看该作者
原帖由 zhanglupanda 于 2007-10-10 11:00 发表
看是这样,但大家想过没有,蜗牛前面的路是越来越远。

但它始终都是靠向绳子的另一端的,所以终有一天会爬过这个端点.

论坛徽章:
0
107 [报告]
发表于 2007-10-10 11:15 |只看该作者
我去下个maple软件去算算.

论坛徽章:
0
108 [报告]
发表于 2007-10-10 11:53 |只看该作者
原帖由 newttle 于 2007-10-10 11:15 发表
我去下个maple软件去算算.

matlab应该就可以了吧

论坛徽章:
0
109 [报告]
发表于 2007-10-10 13:14 |只看该作者
#include <stdio.h>

int main(int argc, char *argv[]) {
&nbsp;&nbsp;double rope_length, snail_crawled, z;
&nbsp;&nbsp;unsigned long i;

&nbsp;&nbsp;rope_length = 1000.0;
&nbsp;&nbsp;snail_crawled = 0.0;
&nbsp;&nbsp;i = 1;

&nbsp;&nbsp;while(snail_crawled <= rope_length) {
&nbsp;&nbsp;&nbsp;&nbsp;snail_crawled += 1.0;
&nbsp;&nbsp;&nbsp;&nbsp;z = rope_length / (rope_length + 100.0);
&nbsp;&nbsp;&nbsp;&nbsp;snail_crawled /= z;
&nbsp;&nbsp;&nbsp;&nbsp;rope_length += 1000.0;
&nbsp;&nbsp;&nbsp;&nbsp;i++;
&nbsp;&nbsp;}
&nbsp;&nbsp;fprintf(stderr, "%lu\n", i);
&nbsp;&nbsp;return 0;
}

论坛徽章:
0
110 [报告]
发表于 2007-10-10 13:17 |只看该作者
刚才的程序
z = rope_length / (rope_length + 100.0);


这一行写错了,应该为:

z = rope_length / (rope_length + 1000.0);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP