题目

已有函数 rand13() ⽣成从 1 到 13 均匀分布的随机整数。请使⽤这⼀函数实现 rand5() ⽣成
⼀个从 1 到 5 均匀分布的随机整数。反之,如已有 rand5(),请据此实现 rand13()

解答

rand13 生成1~13的随机数,每个随机数出现的概率相等,即1~5出现的概率相等,即只获取1~5的随机数等同于rand5

for {
    v := rand13()
    if v <= 5 {
    break
    }
}

rand5 生成1~5的随机数,也可生成[5,10,15,20,25] 的随机数,即5*rand5,[1-5]与[5,10,15,20,25]的组合为[1,2,3,4,5,6,7,8,9,10,10,11,12,13,14,15,15,16,17,18,19,10,20,21,22,23,24,25,25,26,27,28,29,30],其中重复了[10,15,20,25],考虑将[10,15,20,25]转为[9,14,19,24],去除了重复值,随机数范围为[129],获取其中[113]部分

//[1,2,3,4,5] + [4,9,14,19,24]
for {
    v := rand5() + 5 * (rand5()-1)
    if v <= 13 {
        break
    }
}

标签: none

添加新评论