一个物体从原点出发,每一秒以概率1/2向左走,1/2向右走,第一次回到原点的期望时间 比 一只猴子,每秒种随便按键盘上的一个键,第一次打出”Beijing Welcomes You”的期望时间 还要久,因为前者的期望是无穷大.
|
在某个blog 看的这个有趣的问题,于是写个程序验证下。很久没用过rand了。
和烟兄讨论了下
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
double randf()
{
return (double)(rand()/(double)RAND_MAX);
}
int main ()
{
int i,r;
int h;
for ( h= 0;h<10000;h++)
{
// i=0;
r=0;
while (1)
{
srand( (unsigned ) time (NULL));
if ( randf() > 0.5)//可以取到0 1
r+=1;
else
r-=1;
if ( (randf()) > 0.5)//可以取到0 1
r-=1;
else
r+=1;
i++;
if (r==0)
break;
}
}
printf("%d " ,i);
return 0;
}
|
他说其实r不该等于0,应该等于3,或者-3
搞了半天,原来他要说人会转向,共转三次才会回到原点,我说应该像螃蟹那样横行,然后他说,螃蟹也会转弯啊,然后其实这是对问题的复杂化了。
程序运行的结果比较匪夷所思,有时i很小就可以结束,有时跑了十几分钟,仍然没有结果。我想,他可能回不来了。正常i等于三十万左右,
但是这是运气好的时候,否则,我已经等不到他回来了。
烟兄写了个猴子敲键盘的。
这时候我就感觉到了语言的特色了,jave的rand 很简单。JavaScript的代码也很简洁,Python 的语法更简洁,函数也很多,
但是我们却不该各个都去碰下。
事实上我感觉我暂时没法再学习别的语言。因为我一门语言都没深入掌握,所以决定暑假深入学习数据结构和算法。
阅读(472) | 评论(0) | 转发(0) |