不用随机函数rand(),给定特定随机函数f,设计如何生成其他的随机函数g

不用随机函数rand(),给定特定随机函数f,设计如何生成其他的随机函数g?

提示:技巧性很强,二进制编码的问题


题目

不用随机函数rand(),给定特定随机函数f,设计如何生成其他的随机函数g
比如:
(1)f可以生成1–7的随机数,请你设计g,它能产生1–10内的随机数
(2)f可以生成20–25内的随机数,请你设计g,它能产生30–35内的随机数


设计g,它能产生1–10内的随机数

(1)f可以生成1–7的随机数,请你设计g,它能产生1–10内的随机数

原本呢?
咱们可用Math.rand()产生0–1之间的随机小数,乘10就是0–9之间的数字,可以代表1–10

那么现在不让用了

不过咱们有f,它可以产生1–7之间的数,如何对应随机生成0–9呢???

咱们这一次学完你就能理解,这样搞:
(1)将f产生的数中,123当做0,456当做1,7不要了
(2)f随机生成3次,如果数为abcd,自然可以当初是0000–1111的随机数,咱们只用其中的0–9就行了
这样g就设计出来了
是不是很妙?
在这里插入图片描述
这里不要的那些,不要认为是缺失了,咱就是不要,反正f就是随机出1–7
遇到123咱当0,遇到456当1,遇到7当没干,重新来过
每次都是随机搞abcd,一定是等概率出0–15,咱们遇到0–9要了,否则重新来过。

设计g,它能产生30–35内的随机数

(2)f可以生成20–25内的随机数,请你设计g,它能产生30–35内的随机数
好说,f+10=g完事

另外,也可以这么搞
20 21 22当0
23 24 25当1

f每次随机出3个abc
组合000—111
那只要0–5,把67扔掉
然后让abc+30就是g了
30–35
是不是也很巧
在这里插入图片描述


总结

提示:重要经验:

(1)f可以生成1–7的随机数,请你设计g,它能产生1–10内的随机数
(2)f可以生成20–25内的随机数,请你设计g,它能产生30–35内的随机数
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰露可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值