用 Rand7 () 实现 Rand10 ()
已有方法 rand7
可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10
生成 1 到 10 范围内的均匀随机整数。
不要使用系统的 Math.random()
方法。
示例 1:
输入: 1 输出: [7]
示例 2:
输入: 2 输出: [8,4]
示例 3:
输入: 3 输出: [8,1,10]
思路:
关键就在于如何让 1 ~ 10 均等概率输出;可以先实现 Rand5() 。
然后 Rand10() 就分为概率相等的两部分 :
① 0 + 1 ~ 5
② 5 + 1 ~ 5
class Solution { public: int rand10() { int a = rand7(), b = rand7();// a, b为两个1 ~ 7 的随机数 while(a == 7) // a 现在为 1 ~ 6 的随机数,因为 1 ~ 6 内的 奇偶数量相等,a 取到 奇 和 偶 的概率相等 a = rand7(); while(b > 5) // b 为 1 ~ 5 之间的随机数 b = rand7(); return (a & 1 ? 0 : 5) + b;// a 若为奇数则取第一部分,否则取第二部分;这样可以完成概率相等两部分的分配 } };