2015阿里实习线上笔试题-附加题1

随机数生成器

计算机使用的随机数生成器往往是伪随机的,为了达到统计意义上的真随机数,可以需要引入系统

外的变量等作为随机种子(如UNIX系统中熵池)。假设有一天出现了上帝的投硬币函数: int G();

由于这里用到的上帝硬币可能不均匀。但可以保证是G()可以x概率返回1,1-x的概率返回0,其中x为未知常数(且x不等于0或1)。

请实现目标函数: int F(double p);

要求

    1. F函数以概率p返回1,以1-p返回0。
    1. 除了G之外,不使用的任何库函数。 PS:定义宏UINT_MAX=0xffffffff

基于前述类似思路,请构造函数求下述无理数近似值:

    1. double pi(); //圆周率π
    1. double e(); // 自然对数函数的底数e。

提示:作为模拟过程,可引入最高重复试验次数,请简述思路并完成代码。

思路:

  • 由G()生成等概率随机数生成函数,可参考算法导论或这篇博客
  • 由等概随机函数进行多次数(例如10次)随机,那么就会产生1024种结果,而且每种结构都等概。那么我们可以分析每种随机结果,每种随机结果可以用十进制表示,例:
0 1 0 1 0 0 1 0 1 1

可以用十进制331表示,所有可能的十进制都在[0, 1024)范围里。所以只要生成的十进制数小于1024*p就返回1,大于就返回0,这样就可满足要求。

#include <stdlib.h>
#include <iostream>

using namespace std;

int F(double p)
{
    int sum = 0;
    int t = 10;
    int all = 1024;
    int t1 = all * p;

    for (int i = 0; i < t; ++i)
        sum += U()<<i;
    if (sum < t1)
        return 1;
    else if (sum >= t1)
        return 0;
}

// generate the uniform random function
// reference book: <<algorithm introduction>>
int U()
{
    int n1 = -1, n2 = -1;
    do{
        n1 = G();
        n2 = G();
        if (n1 == 0 && n2 == 1)
            return 1;
        else if (n1 = 1 && n2 == 0)
            return 0;
    }while((n1 == 0 && n2 == 0) || (n1 == 1 && n2 == 1))

    exit(-1);
}
时间: 2024-08-24 03:57:26

2015阿里实习线上笔试题-附加题1的相关文章

2015阿里校招研发工程师笔试题

1.C++内存分配中说法错误的是() A 对于栈来说,生长方向是向上的,也就是向着内存地址增加的方向 //错,对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向:对于栈来讲,它的生长方向是向下的,是向着内存地址减小的方向增长. B 对于堆 ,大量的new/delete操作会造成内存空间不连续 //对,对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低.对于栈来讲,则不会存在这个问题,因为 //栈是先进后出的队列,他们是如此的一一对应,以至

百世集团2015暑期实习研发工程师笔试题

1 linux打包文件夹 2 简单数据结构 3 写一条SQL语句,找出表中登陆次数超过1次的用户user_id 4 cashe机制 5 hash异常 6 进程.线程 7 有10G大小的文件,每行记录一条运单信息,机器大小是500M,求出出现次数最多的 前1000条运单号,给出思路. 8 一个CString字符串,里面是小写字母"abddlldk....."(可重复),写出程序,求出 最大的没有重复字符的子串. 9 说说校园快递的情况,给出意见和建议.

前端试题-2016年阿里前端开发工程师笔试题6,7,8题的解法

2016年阿里前端开发工程师笔试题(只有题,没有答案): http://www.cnblogs.com/sdgf/archive/2015/08/18/4740698.html 第6题:请在____处填写答案,从而达到题目的要求 var arr = [1, 2, 3, 4, 5]; var result = arr.sort(_______________________________).join("+"); console.log(result); 解答:在排序当中,如果需要按照某

2015考研 杭电 计算机学院 复试笔试题第一题 JAVA语言解法

杭电 2015年考研 计算机学院 复试笔试第一题 JAVA解法 import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; /* 杭电2015年 计算机学院 复试 笔试题第一题 JAVA解答 * author 刘汪洋 QQ 605283073 * 求出:字符串如:"34223abd#34SB-11--" * 中整数的和 其中-在数字前表示负号,否则为字符 */ pub

【新鲜出炉的,快到碗里来】2015腾讯实习产品类笔试题

昨晚做了2015腾讯实习产品类在线笔试题做题做到累觉不爱啊各种时间不够觉得智商捉急啊 为了攒rp,lz截屏截到手抽筋啊,统统发上来在线测试包含: 评估名称 您需要的全部时间 您需要什么 数字推理测试 45分钟 计算器,笔和纸,鼠标 语言推理测试 45分钟 鼠标 逻辑推理测试 45分钟 笔和纸,鼠标 性格问卷 25分钟 鼠标 邮件里时间这么长,其实不是啊~是25+19+25min(见附件~) 总结起来,其实题目不难我练习部分正确率挺高的8题错1-2题但是练习题时间没限制而且也比实际考试题简单我前面

2015阿里巴巴前端实习生在线笔试题

Summary 大公司开始招实习生了,我也变成过来人了,品味到之前的酸甜苦辣,除了加油好像也没法说那么多. 因为是你在奋斗,心态这件事是你们在掌握的.但是我们唯一能提供的是我们topview实验室新鲜出炉的面经和笔试. (其实我在想有没应届生春招 - -!) Where 2015阿里巴巴前端实习生在线笔试题

CSDN挑战编程——《金色十月线上编程比赛第一题:小女孩数数》

金色十月线上编程比赛第一题:小女孩数数 题目详情: [金色十月线上编程比赛规则] 一个小女孩正在用左手手指数数,从1数到n.她从拇指算作1开始数起,然后,食指为2,中指为3,无名指为4,小指为5.接下来调转方向,无名指算作6,中指为7,食指为8,大拇指为9,如此反复.问最后会停在那个手指上?用编号1.2.3.4.5依次表示大拇指.食指.中指.无名指.小指. 输入格式: 输入多组数据.每组数据占一行,只包含一个整数n(1<=n<=1000000000). 输出格式: 每组数据占一行,只包含一个介

CSDN挑战编程——《金色十月线上编程比赛第二题:解密》

金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同时他也是一个黑客. 考试结束后不久,他惊讶的发现自己的高等数学科目居然挂了,于是他果断入侵了学校教务部网站.在入侵的过程中,他发现了与成绩相关的内容是一个加密文件,这个文件由 n 个数构成,经过分析,这个加密文件的密钥为这 n 个数中二进制位数 1 最少的数.但由于数比较多,小强 希望你能帮他得到密钥,好在成绩公布之前将成绩改过来. 输入描述: 输入由多组数据构成,每组数据第一行为一个数 n(1<=n<=10^5),表示数的数量

阿里校招:前端线上笔试题--计算鼠标在页面某个区域内的停留时长

校招:阿里前端笔试题收到笔试通知后恶补了几天阿里前端历年笔试题,巧的是这道题今年有同学做过,而且发到了北邮人bbs上(看来临阵磨枪还是有用的),现在贴上当时提交的代码. 水平有限,有错误烦请指点. 题目: <div class='mod-spm'data-spmid='123'> <divclass='child_a'></div> <divclass='child_b'></div> <divclass='child_c'><