cout<<rand_7()<<endl; } return 0; } 发散一下 :给定能随机生成1到5的函数rand_5(),随机生成1到1000的函数rand_1000(),显然5^4=625<1000<5^5=3125, 可以5次调用rand_5(),生成1--3125个正整数,取1--3000,将3001--3125舍去;可保证1--1000每个数出现的概率为1/1000. 更一般的:给定能随机生成...
因此假设我们要随机生成[0,444]范围的数,我们只要随机生成3个5进制的数字组合就可以。 这里的主要问题是:7不是5的幂次方。 但是我们可以将某一个5的幂次方均分成 7 段(分别为0 - 6,等概率的落到每一段),利用5进制随机成一个数,看这个数在哪一个段,就代表我们要生成哪一个数字,这样就保证了等概率的生...
用5进制的形式,生成 rand25,从 rand25 生成 rand7,这就转化成了 “大”生成“小” 的问题。然后...
既然rand8可以生成1~8的随机数,而rand7只需要前7个数,完全可以只利用前7个数直接返回。由于rand8会...
其实从大的随机数生成小的随机数是简单的,一般面试会反过来,从小的随机数生成大的,会稍微复杂一点点...
题目 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数? 相关知识点: 试题来源: 解析答: int rand7() { int a; while( (a=rand5()*5+rand5()) > 26 ); return (a-3)/3; } 算法思路是: 1)通过 rand5()*5+rand5() 产生 6 7 8 9 10 11 …… 26,27 28 29 30 这25...
random_ab(2, 11)) print('-'*50) print('1~5随机生成函数转化为1~7随机生成函数') random_1_5 = RandomIJToRandomAB(1, 5) print(random_1_5.random_ab(1, 7)) print('-'*50) print('1~7随机生成函数转化为1~5随机生成函数') random_1_7 = RandomIJToRandomAB(1, 7) print(random_1...
你可能学了一个假的不重复随机数。你不感觉当随机数数量大了这种方法的效率大打折扣么?那么,真正的不重复随机数的思路是什么样的呢?加入生成1-7的随机数1.创建一个数组,内部拥有成员1,2,3,4,5,6,7,该数组可以不讲顺序。2.从该数组中随机抽出一个元素。3.输出该元素4.将这个元素与数组最后一个元素替换...
编写一个生成0和1的随机函数: step1. 调用给定的随机函数original_rand()生成一个数 如果==3 goto step1 如果<3 return 0 如果>3 return 1 编写一个生成1到7的随机函数 调用生成0和1的随机函数3次,构成000或001或010... 如果???不等于0返回,否则重新生成。 int rand...