随机函数只生成0和1

问题:

  有一个随机函数只生成0和1,生成0的概率是p,生成1的概率是1-p,如何操作能使得生成1和0的概率都是1/2?

解答:

  因为调用两次随机函数,则00的概率是p*p,11的概率是(1-p)*(1-p),

  01的概率是p*(1-p),10的概率也是p(1-p),所以,当01的时候输出1,01的时候输出0即可。

时间: 2024-10-12 14:24:24

随机函数只生成0和1的相关文章

谷歌笔试题——排序,只允许0和其他元素交换

2.2 长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的swap,请设计并实现排序. 这题有一个隐含条件:即数组元素是连续的,即0--n-1,当你排好序后,你会发现数组元素和该元素的下标是相等的. 思路:以数组2 0 3 1为例 1.首先a[0]=2,按照上述条件它应该放在a[2]的位置上.因为只允许0元素和其他元素的交换.所以不能直接交换a[0]和a[2],所以将0元素和a[2]互换,得到2 3 0 1,然后就可以把a[0]=2和a[2]=0互换了,得到0 3 2 1 按照这个思

已知可生成0~4的rand5(),实现生成0~6的rand7()

若已知生成0~6的rand7(),求生成0~4的rand5(),则一个方法就是不断生成0~7的数,直到这个数满足0~4就返回. int rand5(){ int res; do{ res = rand7(); }while(res >4); return res; } 现在已知生成0~4的rand5(),求解生成0~6的rand7(),就是想办法利用rand5()去生成0~大于6的数字,可以使用rand5()+rand5()*5,这个式子可以生成0~24的随机数,每个数字的组成只有一种可能,所以

VS2008 工程只生成dll不生成lib的解决方案

http://topic.csdn.net/u/20081216/22/b12d1450-7585-4c9f-867a-7c181737c328.html 问题:vs2008版本的,不知道为什么只生成dll,不生成lib文件了. 解决方案: 在工程上右键 -> 添加 -> 新建项 -> 选"模块定义文件(.def)" -> 随便输入个名字 -> 添加现在编译就可生成.lib 文件了,然后把添加的文件删除,以后都没问题了.如果上边的操作是添加现有项,不能产生

C语言实现随机生成0或1

rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数.如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的.srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的"随机".通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列.

图像细化函数(背景为黑色像素值为0,前景为白色像素值255,必须只含有0和255的像素值,即二值化后的图像)

procedure thinimage(srcimage:pIplImage);var count:Integer; //表示迭代次数 Zhangmude:array [1..9] of Integer; deletelist1,deletelist2:Tlist<Tcvpoint>; //存放着要删除的点 idx,i,j:Integer; whitepointtotal,ap:Integer; tempoint:TCvPoint;begin deletelist1:=Tlist<Tcv

如何生成[0,maxval]范围内m个随机整数的无重复的有序序列

在这里我们将待生成的数据结构称为IntSet,接口定义如下: class IntSetImp { public: IntSetImp(int maxelements,int maxval); void insert(int t); int size(); void report(int *v);//将集合中的元素写入到向量v中 }; 一个使用的范例是: void gensets(int m,int maxval) { int *v = new int[m]; IntSetImp S(m,maxv

随机生成0到n之间的m个数

分析:使用knuth算法: void PutRand(int n,int m) { srand(time(NULL)); for (int i=0;i<n;i++) { if(rand()%(n-i)<m) { cout<<i<<endl; m--; } } } 证明: 1.当i=0时,则生成的随机数是0,1,2...n-1之间的数,共n个:这是0被选到的概率为m/n. 2.当i=1时,生成的随机数是0,1,2...n-2之间的数,共n-1个:假设上次0被选到,那么这次

给一个只包含 0, 1, * 的 String,将所有的* 替换成 0 或者 1, 返回所有的可能行

void GetAllString(int start, string & str, vector<string> & res) { if (start == str.size()) { res.push_back(str); } else { bool has = false; for (int i = start; i < str.size(); i++) { if (str[i] == '*') { str[i] = '1'; GetAllString(i + 1,

[分享]HR独爱50专场,只因0佣金雇佣猎头顾问

互联网进入中国20年,从某种意义上,2014年对于中国来讲绝对是互联网全面爆发的一年.马云的阿里巴巴9月在纽交所上市,上市首日募集资金已经大大超过预期:雷军的小米新机10月发布,在双十一还不一定能拿到货:刘强东的京东2014前三季度销售同比增长110%,把去中心化电商玩得不亦乐乎.再看互联网行业下暗流涌动的人力资源行业,依托于web2.0的传统招聘网站早已光环不再,而各大创新型的招聘模式则风头正劲,誓将招聘求职变成百家争鸣.   互联网高速运转,技术人才紧缺  到底有多少公司,需要技术人才?越来