免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
1 [报告]
发表于 2005-08-28 12:18 |显示全部楼层

一道笔试题,Ubi Soft的

原帖由 "yovn" 发表:

这个你说的被选中概率不一样恐怕是毫无根据。

???
原帖由 "yovn" 发表:
if(rand()*MAX>;=strlen(buf))

这个除了说明遇到空行一定会成立以外,不能说明任何问题。

论坛徽章:
0
2 [报告]
发表于 2005-08-28 12:58 |显示全部楼层

一道笔试题,Ubi Soft的

  1. if(rand() * i++ == 0)
  2.     selectLine = buf;
复制代码

这个是正确的,但不能break

论坛徽章:
0
3 [报告]
发表于 2005-08-28 13:10 |显示全部楼层

一道笔试题,Ubi Soft的

第一行被选中的目的是保证至少有一行被选中,但有可能会被后来的赋值冲掉
(1)只有一行时,结果就是1
(2)有两行时,第一次得selelctLint=1,第二次循环有50%的机会转化成2,机率各50%
....
(n)若前n-1行的机率都有1/(n-1),再看这一行:if(rand() * i++ == 0)这个成立的机率是1/n,不成立的机率是(n-1)/n,即取第n行的机率是1/n,取前n-1行的机率是(n-1)/n,由前面的假设,得到前n-1任一行的机率都是(n-1)/n*(1/(n-1)) = 1/n
证毕

论坛徽章:
0
4 [报告]
发表于 2005-08-28 13:15 |显示全部楼层

一道笔试题,Ubi Soft的

说了不能break

论坛徽章:
0
5 [报告]
发表于 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