首页 > 其他 > 详细

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

时间:2021-09-07 15:16:01      阅读:17      评论:0      收藏:0      [点我收藏+]

用 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

原文:https://www.cnblogs.com/rongrongrong/p/15235274.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!