用 Rand7() 实现 Rand10() -- LeetCode -- 9.5

用 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 若为奇数则取第一部分,否则取第二部分;这样可以完成概率相等两部分的分配
    }
};

  

  



用 Rand7() 实现 Rand10() -- LeetCode -- 9.5

上一篇:vba获取文件夹下所有文件名


下一篇:被安排一件事,但是不会做,你应该怎么办?