V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hxd
V2EX  ›  程序员

怎么凭空生成随机数?

  •  
  •   hxd · 2021-09-13 13:17:36 +08:00 · 10104 次点击
    这是一个创建于 928 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不依凭任何工具,只在脑海中生成随机数,不需要高精度,比如 0-9 随机即可。
    用例:
    - 考场上不会做的题随机选
    - 中午随机选某家店吃饭
    - 散步、跑步时,随机选一条路前行
    - 决定不了的礼物,随机选一样
    etc

    能做到吗?
    如果再加上纸和笔呢?
    108 条回复    2021-09-16 10:07:24 +08:00
    1  2  
    zoharSoul
        1
    zoharSoul  
       2021-09-13 13:26:10 +08:00   ❤️ 2
    纸和笔 这我熟.
    写上 abcd 团成团抓阄不就行
    liuzhaowei55
        2
    liuzhaowei55  
       2021-09-13 13:26:18 +08:00 via Android   ❤️ 4
    先找到一个足够随机的种子,比如随便想一段话,查出他们的笔画数,然后可以取末位数字,还算随机吧
    eason1874
        3
    eason1874  
       2021-09-13 13:26:25 +08:00   ❤️ 1
    随机选中眼前的一样东西,数一数某一范围出现的数量
    raysonx
        4
    raysonx  
       2021-09-13 13:27:12 +08:00 via iPad   ❤️ 2
    背圆周率,依次选择圆周率小数点中的每一位
    andyskaura
        5
    andyskaura  
       2021-09-13 13:29:48 +08:00
    你怎么证明你现在脑袋里想的数字就不是随机数呢
    cnbattle
        6
    cnbattle  
       2021-09-13 13:36:21 +08:00
    简单, 别矫情 别加其他条件约束,0.0
    xenme
        7
    xenme  
       2021-09-13 13:38:24 +08:00 via iPhone   ❤️ 47
    随手一抓,薅一把头发看掉了多少
    malusama
        8
    malusama  
       2021-09-13 13:39:00 +08:00
    你随便想一个不就好了。。。别人能预测你下一个想到的数是什么么?
    woodie1994
        9
    woodie1994  
       2021-09-13 13:39:43 +08:00   ❤️ 1
    随意想两个两位数,然后心算相乘的结果,取十位数的数字。
    Maxxxxyu
        10
    Maxxxxyu  
       2021-09-13 13:42:11 +08:00
    随便找个看到的字,数一下笔画,除 10 算一下余数?
    xbiyy
        11
    xbiyy  
       2021-09-13 13:42:21 +08:00   ❤️ 1
    有笔就简单了,放直了,自由倒下,纸上随便画点分区,笔尖指向哪个就是哪个
    imn1
        12
    imn1  
       2021-09-13 13:44:40 +08:00
    这帖子是随机生成的么?
    Zhouisme
        13
    Zhouisme  
       2021-09-13 13:47:40 +08:00 via Android   ❤️ 1
    恕我直言,这些都有潜意识的选择,只是伪随机。没有真正的随机数生成的办法。伪随机也足够了。
    准备一个筛子自己抛~
    Edsie
        14
    Edsie  
       2021-09-13 13:57:54 +08:00
    掷硬币掷骰子
    dangyuluo
        15
    dangyuluo  
       2021-09-13 13:59:41 +08:00   ❤️ 1
    在脑海中应该很难生成随机数吧,不过我经常用一种办法做随机选择。假设需要随机选择 7 款产品里的某一款,我就随便在脑海里想一句话(比如 I just met BlahBlah. time is one fifty eight )。然后第一个产品对应第一个字母,第二个产品对应第二个字母 ,以此类推往复循环,直到循环完整个字符串。
    fengchang
        16
    fengchang  
       2021-09-13 14:00:46 +08:00   ❤️ 1
    点兵点将,骑马打仗。
    xdeng
        17
    xdeng  
       2021-09-13 14:05:39 +08:00   ❤️ 1
    @xenme 程序员头发没的真相?
    amon
        18
    amon  
       2021-09-13 14:05:57 +08:00   ❤️ 2
    @xenme 这个办法挺好,就是有点耗头发,不知道程序员能不能顶得住。/狗头
    alexmmog
        19
    alexmmog  
       2021-09-13 14:06:15 +08:00
    双色球开奖记录
    zzzmh
        20
    zzzmh  
       2021-09-13 14:08:37 +08:00
    前一天上证指数尾数 缺点是每天只能用一次 且周末没有指数
    itechnology
        21
    itechnology  
       2021-09-13 14:12:25 +08:00
    有纸和笔的话,可以试试抓阄。。。
    aguesuka
        22
    aguesuka  
       2021-09-13 14:26:23 +08:00
    加个 hash. 比如要生成 10 以内的数字, 可以生成四个数字求和模 10
    c6h6benzene
        23
    c6h6benzene  
       2021-09-13 14:28:42 +08:00 via iPhone
    还是随身备一个骰子方便。
    bipy
        24
    bipy  
       2021-09-13 14:32:21 +08:00   ❤️ 1
    看一眼表,(时+分+秒) 取余 10
    xgfan
        25
    xgfan  
       2021-09-13 14:33:37 +08:00   ❤️ 1
    有纸笔,那就转笔啊。
    icy37785
        26
    icy37785  
       2021-09-13 14:36:15 +08:00 via iPhone   ❤️ 2
    @malusama 随便想随机数很难的,一般随便想都容易想到带 7 的数字。挺难克服的,强行不想 7 又容易落到 1 和 3 上面。
    rizon
        27
    rizon  
       2021-09-13 14:42:51 +08:00   ❤️ 1
    可以借助未知的数字, 然后求模转换为你想要的范围。

    此时可以看到的天上的云的数量、
    此时可以看到的路上行人数量、
    广告牌的字数等等

    当然这不是真正意义的随机数,因为这些数字并不会被均匀的分布在你想要随机的范围,
    但是它却是现实意义上的随机
    whywaoxaks
        28
    whywaoxaks  
       2021-09-13 14:48:11 +08:00   ❤️ 1
    说一句话(尽量加上随机的语气词),挑兵挑将。本质就是用字数当随机数。
    比如拿不定主意吃什么,我心里会默念:wcnm 今天早晨吃煎饼果子啊还是混沌呀。
    于是可以得出结果:煎饼。
    starsky007
        29
    starsky007  
       2021-09-13 14:48:15 +08:00
    @woodie1994 想法有点意思,但结果不是随机的。
    whileFalse
        30
    whileFalse  
       2021-09-13 14:51:59 +08:00 via iPhone   ❤️ 1
    随便想一个 5 位数,除以 17 。
    dji38838c
        31
    dji38838c  
       2021-09-13 14:56:00 +08:00   ❤️ 1
    要先把具体想要什么搞清楚。你想要的应该是“均匀分布”的随机数
    “随机数”容易的很,自己随便想一个数字就是随机数,不过不是“均匀分布”
    yolee599
        32
    yolee599  
       2021-09-13 14:57:45 +08:00   ❤️ 1
    点兵点将点到谁我就选谁
    Incrus
        33
    Incrus  
       2021-09-13 14:58:24 +08:00
    @xenme 每次都是 0,是抓的不够用力,还是光头的缘故?
    wr516516
        34
    wr516516  
       2021-09-13 14:59:51 +08:00
    18129 不知道为什么突然想起来的五位数
    @whileFalse
    magese
        35
    magese  
       2021-09-13 15:24:48 +08:00
    @whileFalse #30

    五位数第一时间想到的就是 65535
    zxcslove
        36
    zxcslove  
       2021-09-13 15:42:27 +08:00
    扔鞋吧
    ywlvs
        37
    ywlvs  
       2021-09-13 16:02:45 +08:00
    薅头发就好,薅下来几根,随机数就是几
    Kasumi20
        38
    Kasumi20  
       2021-09-13 16:04:44 +08:00
    random 生成一个野指针,然后看它的值
    xz410236056
        39
    xz410236056  
       2021-09-13 16:06:06 +08:00
    歪个楼
    笔可以编码一些信息,比如条形码简单编码成 0-1, 下面数字可以编码成 16 进制。考试 铅笔+中性笔+橡皮,能编码不少信息。编码几个提示性的语句
    Kagari
        40
    Kagari  
       2021-09-13 16:07:16 +08:00 via Android
    用当前时间吧
    首先,双臂平展成十字,接受 GPS 信号,然后解析时间戳,对 10 取余数
    cking
        41
    cking  
       2021-09-13 16:08:50 +08:00
    @woodie1994 我第一反应就是 1 + 1 1*1 咋办
    ysc3839
        42
    ysc3839  
       2021-09-13 16:09:28 +08:00
    我觉得我的脑子生成出来的不够随机,所以在能联网的情况下我会用 random.org 来抽随机数。
    hxd
        43
    hxd  
    OP
       2021-09-13 16:10:09 +08:00
    各位各位,有些想法还是比较有实用意义的。
    只是多数仍落入了两个误区:
    - 还是借用了某种工具。 (希望是能完全就脑海里想出来的)
    - 不够随机。 (希望能尽量均匀分布,或接近均匀分布)

    另外,最初纸笔的想法是拿来写和计算的呀,大家真有创意呢 XD
    jiangboenoch
        44
    jiangboenoch  
       2021-09-13 16:34:55 +08:00
    随机想四个三位数,相加取和 sum
    return Math.round(sum[1]+sum[4])
    Mohanson
        45
    Mohanson  
       2021-09-13 16:39:28 +08:00
    1. 在大脑中记忆一个初始随机数 R
    2. 使用线性同余方程: R = (A * R + B) % M 获得随机数 R
    3. 将第二部中的 R 作为新的初始随机数 R
    qwerthhusn
        46
    qwerthhusn  
       2021-09-13 16:41:59 +08:00
    看一眼比特币此时此刻的价格
    FstarKing
        47
    FstarKing  
       2021-09-13 16:51:23 +08:00
    看时间 现在 16:51
    FstarKing
        48
    FstarKing  
       2021-09-13 16:52:37 +08:00   ❤️ 2
    16:51
    1 + 6 + 5 + 1 = 13
    1 + 3 = 4
    随机结果 4
    ltruntu
        49
    ltruntu  
       2021-09-13 16:52:41 +08:00
    开始解放思想了?
    fuchaofather
        50
    fuchaofather  
       2021-09-13 16:54:19 +08:00
    抛硬币。正面 1 反面 0,每四次产生一位二进制数取 10 以内的
    fkdog
        51
    fkdog  
       2021-09-13 17:02:09 +08:00
    把嘴闭上, 我说一个数....
    vstar
        52
    vstar  
       2021-09-13 17:06:25 +08:00
    [焦点 Focus]( https://movie.douban.com/subject/20277433/)
    这个电影里有个情节 脑内的随机数被操控了 大脑不可靠
    cloudfox
        53
    cloudfox  
       2021-09-13 17:07:18 +08:00   ❤️ 1
    pandaaa
        54
    pandaaa  
       2021-09-13 17:40:43 +08:00
    @xenme 别说了,别说了,血压上来了😭
    hanqian
        55
    hanqian  
       2021-09-13 17:45:12 +08:00
    “有意识的” 生成 “真正的随机”

    这本身就有逻辑矛盾吧?
    oxromantic
        56
    oxromantic  
       2021-09-13 17:51:00 +08:00
    看过言情剧吗?摘一朵野花,扯花瓣,他爱我-他不爱我-他爱我-他不爱我。。。
    jiayong2793
        57
    jiayong2793  
       2021-09-13 18:16:20 +08:00   ❤️ 1
    自己控制随机事件,其实就是让自己的行为不受意识控制
    例如:定一个规则,跑到下一个路口的时候左脚在前就左转,右脚在前就右转,然后自然地跑过去
    kwanzaa
        58
    kwanzaa  
       2021-09-13 18:46:15 +08:00
    脑海里 0-9 刷新数字,随机暂停就是了。
    pkoukk
        59
    pkoukk  
       2021-09-13 18:55:18 +08:00
    搓眼睛,然后闭上眼睛数星星
    clague
        60
    clague  
       2021-09-13 19:17:31 +08:00
    脑子里生成一个线性反馈移位寄存器
    geekvcn
        61
    geekvcn  
       2021-09-13 19:33:15 +08:00 via iPhone
    世界上没有随机的东西,都是既定的,命运都是注定的。
    hush3
        62
    hush3  
       2021-09-13 19:35:00 +08:00
    哼一句歌 歌词字数
    menc
        63
    menc  
       2021-09-13 20:17:15 +08:00   ❤️ 1
    说点正经的解决方案。
    线性同余法,glibc/GCC 的伪随机数生成器就是这个算法

    X_n+1 = (a * X_n + c) mod m



    glibc 的参数设置如下:
    a = 1103515245
    c = 12345

    在你的场景下,有几个选项,m 就取几
    x_n 是随机数种子,随便选一个,然后计算任意次数,得到的结果可以看做是 m 范围内取随机数,至少随机性和 glibc 取的伪随机数效果一致
    wffnone
        64
    wffnone  
       2021-09-13 20:34:47 +08:00 via iPhone   ❤️ 1
    @menc 你是唯二正经回答之一,但是你的回答是错的- -…

    这个公式用于生成的是伪随机序列。如果用它产生第一个随机数,乃至于任何明确 N 的第 N 个随机数,都是完全依赖于种子的。

    随机性不能脱离分布去谈。题中要求的随机数,其对应的分布,在你的解答下,是所有方便想到的数做这个运算得到的数。这个分布完全不同于按固定种子连续运算得到的序列的分布。

    所以这是一种误用。这个运算不产生随机,只是把脑子想的数字做了一个映射。
    winglight2016
        65
    winglight2016  
       2021-09-13 20:58:10 +08:00   ❤️ 2
    这个宇宙是否存在“真”随机性是个哲学问题,比较接近的是微观粒子的分布概率。大脑里的神经网络虽然是挺复杂的,但是由于习惯路径的存在,同样的选择路径更容易出现,这怎么也不可能达到楼主要求的均匀分布。如果有个硬币倒是比较能实现均匀分布的概率。
    c0xt30a
        66
    c0xt30a  
       2021-09-13 22:36:39 +08:00
    @bipy 这个方法好像不是均匀随机
    herozzm
        67
    herozzm  
       2021-09-13 22:37:29 +08:00
    眼珠一转,毫无根据脱口而出就行了
    Mutoo
        68
    Mutoo  
       2021-09-13 22:40:42 +08:00
    如果要在脑子里直接可用的话,最简单的就是自己做两轮石头剪刀布,三进制,这样就有 3^2=9 种组合。虽然不是 0~9,但是 0~8 应该也够用了吧。
    bipy
        69
    bipy  
       2021-09-13 23:00:14 +08:00   ❤️ 3
    @c0xt30a #66

    ```python3

    d = {}

    for i in range(10):
    d[i] = 0

    for i in range(24):
    for j in range(60):
    for k in range(60):
    d[(i + j + k) % 10] += 1

    print(d)

    ```
    ===================

    {0: 8640, 1: 8640, 2: 8640, 3: 8640, 4: 8640, 5: 8640, 6: 8640, 7: 8640, 8: 8640, 9: 8640}
    flynaj
        70
    flynaj  
       2021-09-13 23:46:45 +08:00 via Android   ❤️ 1
    你还不并不如投骰子🎲
    menc
        71
    menc  
       2021-09-14 00:56:44 +08:00
    @wffnone 题目所说的随机数希望得到的都是 uniform distribution,从分布看,这个算法是满足的。
    你说的问题不是这个算法的问题,是伪随机数本身的问题,所有伪随机数生成算法都有同样的问题,但在实际应用中,我们不考虑这点,在足够大的 sample space 内能满足 uniform distribution 就是可用的方法。
    menc
        72
    menc  
       2021-09-14 01:01:40 +08:00
    @wffnone 我明白你的意思了,改一下,第一次随机选一个种子,以后只要记住上一次的随机数结果,继续该运算即可
    Lemeng
        73
    Lemeng  
       2021-09-14 01:36:59 +08:00
    时间和日期,再加上自己的算法,就是随机数
    dwztom
        74
    dwztom  
       2021-09-14 02:19:51 +08:00 via Android
    @xenme 可以可以!
    不仅非常随机,能力还变强了。
    c0xt30a
        75
    c0xt30a  
       2021-09-14 02:34:43 +08:00
    @bipy 是我想错了,不好意思。感谢代码指出。
    nvkou
        76
    nvkou  
       2021-09-14 03:37:15 +08:00
    直接按顺序就行了. 因为事件是随机的.那么你的编号就可以不随机了
    比如规定日期个位数为每日起点. 需要的时候脑内+1 就行了
    场景: 午饭吃几号套餐? 今天 13 号,这是今天第一次需要随机数. 那就 4. 如果今天第 3 次需要随机数就 6
    Howlaind
        77
    Howlaind  
       2021-09-14 07:21:41 +08:00 via Android
    点兵点将
    ziseyinzi
        78
    ziseyinzi  
       2021-09-14 07:27:58 +08:00
    砂锅炒豆越炒越臭
    xnth97
        79
    xnth97  
       2021-09-14 08:53:24 +08:00
    小六壬?
    perpetually
        80
    perpetually  
       2021-09-14 09:21:07 +08:00
    这个很简单,脑子里面想段文字,奇数就选一,偶数就选二

    比如你看我上面那句
    perpetually
        81
    perpetually  
       2021-09-14 09:22:01 +08:00
    @perpetually 要更复杂一点,就数笔画,比如第 12 个字是奇数还是偶数笔画
    JesseLexin
        82
    JesseLexin  
       2021-09-14 09:39:19 +08:00
    @zzzmh 金融统计学专业的我表示,这个不算随机的
    gablic
        83
    gablic  
       2021-09-14 10:10:50 +08:00
    用脑袋撞墙,然后数下看见多少星星
    1arry
        84
    1arry  
       2021-09-14 10:12:01 +08:00
    投硬币,生成速度看手速。
    xiaojianghu
        85
    xiaojianghu  
       2021-09-14 10:37:08 +08:00
    这种不能叫随机数,只能说是你不能预测的数值
    blackshow
        86
    blackshow  
       2021-09-14 11:02:52 +08:00
    能做到吗?做不到
    如果再加上纸和笔呢?做不到
    neptuno
        87
    neptuno  
       2021-09-14 11:28:53 +08:00
    随便想两个 1-10 数字,相乘,然后看你心情向上向下取整、四舍五入,或者取个位数
    fo2w
        88
    fo2w  
       2021-09-14 11:32:13 +08:00
    看到多选我唯唯诺诺

    看到单选我重拳出击
    Canon1014
        89
    Canon1014  
       2021-09-14 11:36:26 +08:00
    小公鸡点到谁我就选谁
    paxol
        90
    paxol  
       2021-09-14 11:45:08 +08:00
    大数模除,只要模数别选特殊的,基本上没法预测
    destinyzou
        91
    destinyzou  
       2021-09-14 11:48:33 +08:00   ❤️ 1
    抛硬币,正面是 1 反面是 0
    抛四次就可以表示 16 个数了
    koebehshian
        92
    koebehshian  
       2021-09-14 12:40:02 +08:00
    这么多种生成随机数的方案,怎么随机选一种使用
    keith1126
        93
    keith1126  
       2021-09-14 14:30:10 +08:00   ❤️ 3
    把这个帖子转到了校内论坛,再转回几条回复吧,应该基本上完美解决了问题(除了有点复杂):



    zheng5200
        94
    zheng5200  
       2021-09-14 17:35:37 +08:00
    @xenme 这方法直接赢麻了
    pkookp8
        95
    pkookp8  
       2021-09-14 17:52:09 +08:00 via Android
    让一个不会用 vim 的人打开 vim,等他退出
    opengps
        96
    opengps  
       2021-09-14 20:20:19 +08:00
    背π的小数点之后 N 位
    wffnone
        97
    wffnone  
       2021-09-14 20:26:27 +08:00 via iPhone
    @keith1126 人凭空出 01 串绝不可能独立同分布啊,想一想就知道自相关一定会很强。这个同学的回答也就是套了别人的一个公式,用在这里还是完全的误用啦。
    嗯不过这个知识点还挺有意思的。
    Cu635
        98
    Cu635  
       2021-09-14 21:27:43 +08:00
    @keith1126
    那个学校?校内论坛如此之强?
    有个小问题啊,图片里的文字第二行,前面还说是“长为 2l 的 01 串”呢,后面就是( X₁,...Xₗ),下标只到 l 了?
    loading
        99
    loading  
       2021-09-14 21:45:00 +08:00
    @xenme #7 我补充一下:
    如果确实太年轻,可以抓头,数头皮屑。
    keith1126
        100
    keith1126  
       2021-09-14 22:01:41 +08:00
    @wffnone #97

    确实,最基本的一点:生成时会主动避开连续的 0 或 1,因为感觉「不够随机」
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2825 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 12:56 · PVG 20:56 · LAX 05:56 · JFK 08:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.