日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 470. 用 Rand7() 实现 Rand10()(随机概率)

發布時間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 470. 用 Rand7() 实现 Rand10()(随机概率) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

已有方法 rand7 可生成 1 到 7 范圍內的均勻隨機整數,試寫一個方法 rand10 生成 1 到 10 范圍內的均勻隨機整數。

不要使用系統的 Math.random() 方法。

示例 1: 輸入: 1 輸出: [7]示例 2: 輸入: 2 輸出: [8,4]示例 3: 輸入: 3 輸出: [8,1,10]提示: rand7 已定義。 傳入參數: n 表示 rand10 的調用次數。進階: rand7()調用次數的 期望值 是多少 ? 你能否盡量少調用 rand7() ?

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/implement-rand10-using-rand7
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

class Solution {int a, b; public:int rand10() {a = rand7();b = rand7();while(a == 7)a = rand7(); //a = 1--6均勻分布while(b > 5)b = rand7(); //b = 1--5均勻分布if(a%2) //a有50%的概率是奇數(1,3,5)return b;//1--5return 5+b;//6--10(a有50%概率是偶數)} };


調用次數 2+∑i=1ni/7i+∑i=1ni?2i/7i=2.752+\sum_{i=1}^n i/{7^i}+\sum_{i=1}^n i*{2^i}/{7^i}=2.752+i=1n?i/7i+i=1n?i?2i/7i=2.75

>>> sum = 2 >>> for i in range(1,10000):sum += (i+i*pow(2,i))/pow(7,i)>>> sum 2.7544444444444447

看官方解法:
有個疑問 : 1-49的分布概率是不均勻的吧,比如 6= 1X6 = 2X3,而 7 = 1X7

class Solution {int a, b, n; public:int rand10() {do{a = rand7();b = rand7();n = (a-1)*7+b;}while(n > 40);return (n-1)%10 + 1;} };

總結

以上是生活随笔為你收集整理的LeetCode 470. 用 Rand7() 实现 Rand10()(随机概率)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。