rand5->rand7,rand7->rand10

int Random5()
{
    return rand() % 5 + 1;
}
int Random7()
{
    return rand() % 7 + 1;
}
int rand7()
{
    int i;
    do
    {
        i = 5 * (Random5() - 1) + Random5();
    } while (i > 21);
    return i % 7 + 1;
}
int rand10()
{
    int i;
    do
    {
        i = 7 * (Random7() - 1) + Random7();
    } while (i > 40);
    return i % 10 + 1;
}
时间: 2024-12-19 18:13:38

rand5->rand7,rand7->rand10的相关文章

已知rand7() 可以产生1~7的7个数(均匀概率),利用rand7()产生rand10()1~10(均匀概率)

题目:已知rand7() 可以产生1~7的7个数(均匀概率),利用rand7()产生rand10()1~10(均匀概率). 解析:首先利用rand7()产生1-5的5个数,每个数的概率为1/5,然后在这5个数的基础上再以1/2的概率加上5,这样就能以1/10的概率产生每一个数. 答案: int rand10() { int tmp1,tmp2; do { tmp1=rand7(); }while(tmp1>5); do { tmp2=rand7(); }while(tmp2>2); retur

利用rand7()构造rand10()

题意 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10 参考代码 int rand7() { srand((int)time(NULL)); //参考 return rand()%7 + 1; } int rand10() { int x; do { x = (rand7()-1) * 7 + rand7(); }while(x > 40); return x % 10 + 1; } 解析 要保证rand10()均匀生成1~10的随机

已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10

1.int rand7()    2.{    3.  return rand()%7+1;    4.}    5.  6.int rand10()  7.{  8.    int x=0;  9.    do  10.    {  11.        x=(rand7()-1)*7+rand7();  12.    }  13.    while(x>40);  14.    return x%10+1;  15.} 分析:要保证rand10()在整数1-10的均匀分布,可以构造一个1-1

算法题--rand5产生rand7

由一个随机数产生另外一个随机数,最关键的问题是,如何实现等概率映射? 下面是我的rand5产生rand7的实现: 主要思路是将rand5映射到rand(5~30),然后抛去多余的几个,将剩下的21个数每三个映射到1~7之间得数. 1 #include <iostream> 2 #include <string> 3 #include <memory.h> 4 #include <vector> 5 #include <sstream> 6 #in

一道随机函数题:由rand5()生成rand7()

题目:已知rand5()函数能随机等概率的生成0, 1, 2, 3, 4,利用rand5()函数编写一个rand7()函数实现相似的功能. 分析:其实就是利用rand5()组合成一个更大范围的数,之后利用求余(%)再映射到0-6之间. Java代码: int rand7() { //已知rand5()产生0,1,2,3,4,求rand7() int a; do { a = 5*rand5() + rand5(); //产生0-24 } while (a > 20); //只取0-20 retur

Summary: rand5构造rand7

给一个方法,比如 rand5(), 它能够等概率生成 1-5 之间的整数. 所谓等概率就是1,2,3,4,5 生产的概率均为 0.2 .现在利用rand5(), 构造一个能够等概率生成 1- 7 的方法. 这里有两个特别重要的点,一是 如果 rand5() + rand5(), 我们能够产生一个均匀分布的1 - 10 吗? 答案是否定的.比如对于 6来讲(4+2, 2+4, 3+3),它被生成的生成的概率比1 (1+0,0+1)要大. 第二个点就是我们不可能用rand5()直接产生 1- 7 的

浅析 rand7生成rand10 方法 之 思想篇(一)

[问题描写叙述] rand7是一个能生成1-7的随机数.要求利用rand7生成1-10的随机数. [算法思想] 1.组合数学方法 第1次 1 2 3 4 5 6 7 之中用rand7取一个数 第2次从 2 3 4 5 6 7 8 之中取一个数 第3次从 3 4 5 6 7 8 9 之中取一个数 第4次从 4 5 6 7 8 9 10 之中取一个数 第5次从 5 6 7 8 9 10 1 之中取一个数 第6次从 6 7 8 9 10 1 2 之中取一个数 ... 第10次从 10 1 2 3 4

[Swift]LeetCode470. 用 Rand7() 实现 Rand10() | Implement Rand10() Using Rand7()

Given a function rand7 which generates a uniform random integer in the range 1 to 7, write a function rand10 which generates a uniform random integer in the range 1 to 10. Do NOT use system's Math.random(). Example 1: Input: 1 Output: [7] Example 2:

用rand7()构造rand10()

rand7生成7个整数,没有办法均匀的映射成10个整数,但是运行两次rand7可以生成49个数字,如果这49个数字是均匀分布的,舍去多余的9个,剩下的40个正好可以用模10运算映射到10个整数上. 代码1 view plain int i; do { i = 7 * (rand7() - 1) + rand7();  // it is now uniformly random between 1 and 49 } while(i > 40);      // it is now uniforml

【算法】如何用随机函数rand5来构造随机函数rand7

常规方法 今天公司有一个面试题是这样的:假如有一个函数rand5能等概率生成1 - 5 之间的整数,如何利用rand5来实现rand7?rand7函数的要求是能够等概率生成1 - 7之间的整数.说实话我自己也不是很清楚. 这个问题很经典的.carreercup那本书上有个常见的解法,我记得算法大概是这样的,用PHP写写吧: 01 echo 'rand7 = '.rand7(); 02   03 function rand7() 04 { 05     while (true) 06     {