免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4941 | 回复: 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
30 [报告]
发表于 2005-08-31 00:44 |只看该作者

一道笔试题,Ubi Soft的

我也参加过这个笔试,这个题目不算难,不过楼主记忆力不佳,基本上题目完全写错了(这也没办法,只有做出来才会详细记得什么样)。

最重要的是:这个考试最后必须签名申明不会泄露笔试内容的!我看版主还是把这贴删了吧。

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

一道笔试题,Ubi Soft的

同意javacool~~

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

一道笔试题,Ubi Soft的

if( (int)(rand()*i++) ==0 ) ?
i初值一定,不是不管多少行,同一行的概率都相同了吗?

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

一道笔试题,Ubi Soft的

错了,怎么不能删啊

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

一道笔试题,Ubi Soft的

static int i=1;
if( rand()<(1/i++) ){
}

这样行吗?
rand()<(1/i)的概率总是1/i

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

一道笔试题,Ubi Soft的

恩 对 我疏忽了 要去掉 BREAK
而且要转储字符串
不过这是个经典问题 其实肯定不应该有BREAK
因为最起码 程序要遍历文件一次 不然你怎么知道MAX_LINE
估计是楼主自己也没记清楚
据说MS 也出过这道题

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

一道笔试题,Ubi Soft的

原帖由 "javacool" 发表:
(int)(rand()*i++) ==0
保证每行的概率是1, 1/2, ....., 1/MAX
注意这个其实是条件概率
我们从第MAX行考虑 他被选中的概率为1/MAX
如果他没被选中 则按平均分布的概念 应该在MAX-1种选一个
设第MAX-1元素被选�.........

这样的算法,楼主的题目要改两个地方:
1、把BREAK去掉
2、
selectLine=buf;
改为
char selectLine[MAX];
……
strcpy(selectLine, buf);

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

一道笔试题,Ubi Soft的

(int)(rand()*i++) ==0
保证每行的概率是1, 1/2, ....., 1/MAX
注意这个其实是条件概率
我们从第MAX行考虑 他被选中的概率为1/MAX
如果他没被选中 则按平均分布的概念 应该在MAX-1种选一个
设第MAX-1元素被选中为A 第MAX元素没有被选中为B
因此P(A|B) = P(AB)/P(B) = 1/(MAX-1)
P(AB)从概念上理解就是P(A) 因为B情况包含A因此
P(A)/P(B) = 1/(MAX-1)  P(B) = 1 - 1/MAX = (MAX-1)/MAX
因此P(A)的概率也是1/MAX
由此往前推 其实所有元素的概率都是1/MAX 及满足均匀分布
其实最需要注意的是真实概率其实并不是1/n ,这是一个条件概率

严密的证明我也给不出
程序设计实践上说The art of programming 上有完整证明

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

一道笔试题,Ubi Soft的

唔~~~这个说得还有道理
也就是说这个selectLine不能是个char *,而应该是个string
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP