已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。
2013-05-06 08:56
363 查看
参考答案:这题主要考的是对概率的理解。程序关键是要算出rand10,1到10,十个数字出现的概率都为10%.根据排列组合,连续算两次rand7出现的组合数是7*7=49,这49种组合每一种出现概率是相同的。怎么从49平均概率的转换为1到10呢?
方法是:
1.rand7执行两次,出来的数为a1=rand7()-1,a2=rand7()-1.
2.如果a1*7+a2<40,b=(a1*7+a2)/4+1;如果a1*7+a2>=40,重复第一步。
参考代码如下所示:
方法是:
1.rand7执行两次,出来的数为a1=rand7()-1,a2=rand7()-1.
2.如果a1*7+a2<40,b=(a1*7+a2)/4+1;如果a1*7+a2>=40,重复第一步。
参考代码如下所示:
#include <iostream> #include <time.h> using namespace std; int rand7(){ return rand()%7+1; } int rand10(){ int a71,a72,a10; do{ a71 = rand7()-1; a72 = rand7()-1; a10 = a71*7+a72; }while(a10 >= 40); return a10/4+1; } int main(){ int i,j; const int N = 10000000; int Times[11] = {0}; //1-10分别出现的次数 srand(time(NULL)); for(i=0;i<N;i++) Times[rand10()]++; cout<<"1到10分别出现的概率:"<<endl; for(j=1;j<=10;j++){ cout<<j<<"\t"<<(float)Times[j]/N<<endl; } return 0; }
相关文章推荐
- 172 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10()随机1~10
- 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。
- 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
- 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
- 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
- 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
- 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
- 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。
- 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
- 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10()
- 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
- 随机数问题--已知有个Random7()的函数,返回1到7随机自然数,让利用这个Random7()构造Random10()随机1~10.
- 设rand(s,t)返回[s,t]之间的随机小数,利用该函数在一个半径为R的圆内找随机n个点,并给出时间复杂度分析。
- 阿里巴巴面试算法题:有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机取出一个数,而这个数必须是符合1/N
- 腾讯笔试之“已知rand7()可以产生1~7的7个数(均匀概率),利用rand7() 产 生 rand10() 1~10(均匀概率)。”
- /有一个函数fun能返回0和1两个值,返回0和1的概率都是1/2,问怎么利用这个函数得到另一个函数fun2,使fun2也只能返回0和1,且返回0的概率为1/4,返回1的概率为3/4
- (转载)由1-7的随机整数函数构造1-10随机整数函数
- 由1-7的随机整数函数构造1-10随机整数函数
- 由1-7的随机整数函数构造1-10随机整数函数
- 给定一个random()函数,返回1到n的随机值,构造一个random2()的函数,返回1到m...