免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4852 | 回复: 29
打印 上一主题 下一主题

一道笔试题,Ubi Soft的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-27 18:56 |只看该作者 |倒序浏览
去Ubi Soft笔试了一次,可耻地失败了,但有道题目印象深刻,反正是以前没见过的:

有一个长度不定的文本文件,要从中随机选出一行,要求在一次遍历文件之内完成,而且每一行被选中的概率相等.

原题是填空,大概是这样子,不一定准确,但意思到堂了:

char* f(){
char* selectLine;
static char buf[MAX];

while( readline(buf, MAX))
{
        if ( 要填的地方) {
               selectLine = buf;
               break;
       }
}
}
return selectLine;

可以使用rand()函数,返回一个0-1的double型的随机数.

今天上网一次,下次大概是十天半个月以后,所以如果说明不清,只好望大家见谅,并自行揣摩意思,对不起

论坛徽章:
0
2 [报告]
发表于 2005-08-27 21:47 |只看该作者

一道笔试题,Ubi Soft的

int i = 1;

(int) (rand() * i++) == 0
具体可以程序设计实践 C专家编程都有涉及
art of programming 上据说有证明

论坛徽章:
0
3 [报告]
发表于 2005-08-28 10:56 |只看该作者

一道笔试题,Ubi Soft的

原帖由 "javacool" 发表:
int i = 1;

(int) (rand() * i++) == 0
具体可以程序设计实践 C专家编程都有涉及
art of programming 上据说有证明

i=1,
rand()根据楼主的意思是0~1.
如果不包括1,那(int)(rand()*1)就是0了。
第一行必被选中。

如果rand()是[0,1],那么
第一行被选中的概率是[0,1)/[0,1],
还是必被选中(一个点在一个区间里出现的的概率极限值为0)。

不会出现每行被选中概率相同的情况。

不知道我的理解是不是对的,
请大家指正。

论坛徽章:
0
4 [报告]
发表于 2005-08-28 11:15 |只看该作者

一道笔试题,Ubi Soft的

假设搂主的rand()是[0-1](好像是0~RAND_MAX)
if(rand()*MAX>;=strlen(buf))
这样对于每一行,都有机会符合这个表达式。

论坛徽章:
0
5 [报告]
发表于 2005-08-28 11:24 |只看该作者

一道笔试题,Ubi Soft的

原帖由 "yovn" 发表:
像是0~RAND_MAX)
if(rand()*MAX>;=strlen(buf))
这样对于每一行,都有机会符合这个表达式。

但是每一行被选中的概率并不相等,
而且更要命的是:你无法保证一定能选中其中一行。
极有可能一行都不选。

论坛徽章:
0
6 [报告]
发表于 2005-08-28 11:33 |只看该作者

一道笔试题,Ubi Soft的

(int) (rand() * 2) == 0呢?

论坛徽章:
0
7 [报告]
发表于 2005-08-28 11:39 |只看该作者

一道笔试题,Ubi Soft的

[quote]原帖由 "Arghawk"](int) (rand() * 2) == 0呢?[/quote 发表:

第一行被 选中的概率是1/2
第二行是1/2×1/2
第三行是1/2×1/2×1/2
……
第N行是(1/2)的N次方

同样不能保证一定会选到某行

论坛徽章:
0
8 [报告]
发表于 2005-08-28 11:58 |只看该作者

一道笔试题,Ubi Soft的

没明白,为什么概率以n次方增长!第1次循环完了,第2次循环的rand()同样是产生一个在0到1之间的任何一个数,rand()可能产生和第1次同样的数啊!怎么概率就减少呢?

论坛徽章:
0
9 [报告]
发表于 2005-08-28 12:06 |只看该作者

一道笔试题,Ubi Soft的

只有第一次循环完了第二次才有可能被选中,
第一次不被选中,1/2,第二次被选中,又是1/2,是:1/2×1/2

论坛徽章:
0
10 [报告]
发表于 2005-08-28 12:08 |只看该作者

一道笔试题,Ubi Soft的

原帖由 "assiss" 发表:

但是每一行被选中的概率并不相等,
而且更要命的是:你无法保证一定能选中其中一行。
极有可能一行都不选。

这个你说的被选中概率不一样恐怕是毫无根据。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP