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

怎么凭空生成随机数?

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

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

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

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

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

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

    这本身就有逻辑矛盾吧?
    oxromantic
        56
    oxromantic  
       87 天前
    看过言情剧吗?摘一朵野花,扯花瓣,他爱我-他不爱我-他爱我-他不爱我。。。
    jiayong2793
        57
    jiayong2793  
       87 天前   ❤️ 1
    自己控制随机事件,其实就是让自己的行为不受意识控制
    例如:定一个规则,跑到下一个路口的时候左脚在前就左转,右脚在前就右转,然后自然地跑过去
    kwanzaa
        58
    kwanzaa  
       87 天前
    脑海里 0-9 刷新数字,随机暂停就是了。
    pkoukk
        59
    pkoukk  
       87 天前
    搓眼睛,然后闭上眼睛数星星
    clague
        60
    clague  
       87 天前
    脑子里生成一个线性反馈移位寄存器
    geekvcn
        61
    geekvcn  
       87 天前 via iPhone
    世界上没有随机的东西,都是既定的,命运都是注定的。
    hush3
        62
    hush3  
       87 天前
    哼一句歌 歌词字数
    menc
        63
    menc  
       87 天前   ❤️ 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  
       87 天前 via iPhone   ❤️ 1
    @menc 你是唯二正经回答之一,但是你的回答是错的- -…

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

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

    所以这是一种误用。这个运算不产生随机,只是把脑子想的数字做了一个映射。
    winglight2016
        65
    winglight2016  
       87 天前   ❤️ 2
    这个宇宙是否存在“真”随机性是个哲学问题,比较接近的是微观粒子的分布概率。大脑里的神经网络虽然是挺复杂的,但是由于习惯路径的存在,同样的选择路径更容易出现,这怎么也不可能达到楼主要求的均匀分布。如果有个硬币倒是比较能实现均匀分布的概率。
    c0xt30a
        66
    c0xt30a  
       86 天前
    @bipy 这个方法好像不是均匀随机
    herozzm
        67
    herozzm  
       86 天前
    眼珠一转,毫无根据脱口而出就行了
    Mutoo
        68
    Mutoo  
       86 天前
    如果要在脑子里直接可用的话,最简单的就是自己做两轮石头剪刀布,三进制,这样就有 3^2=9 种组合。虽然不是 0~9,但是 0~8 应该也够用了吧。
    bipy
        69
    bipy  
       86 天前   ❤️ 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  
       86 天前 via Android   ❤️ 1
    你还不并不如投骰子🎲
    menc
        71
    menc  
       86 天前
    @wffnone 题目所说的随机数希望得到的都是 uniform distribution,从分布看,这个算法是满足的。
    你说的问题不是这个算法的问题,是伪随机数本身的问题,所有伪随机数生成算法都有同样的问题,但在实际应用中,我们不考虑这点,在足够大的 sample space 内能满足 uniform distribution 就是可用的方法。
    menc
        72
    menc  
       86 天前
    @wffnone 我明白你的意思了,改一下,第一次随机选一个种子,以后只要记住上一次的随机数结果,继续该运算即可
    Lemeng
        73
    Lemeng  
       86 天前
    时间和日期,再加上自己的算法,就是随机数
    dwztom
        74
    dwztom  
       86 天前 via Android
    @xenme 可以可以!
    不仅非常随机,能力还变强了。
    c0xt30a
        75
    c0xt30a  
       86 天前
    @bipy 是我想错了,不好意思。感谢代码指出。
    nvkou
        76
    nvkou  
       86 天前
    直接按顺序就行了. 因为事件是随机的.那么你的编号就可以不随机了
    比如规定日期个位数为每日起点. 需要的时候脑内+1 就行了
    场景: 午饭吃几号套餐? 今天 13 号,这是今天第一次需要随机数. 那就 4. 如果今天第 3 次需要随机数就 6
    Howlaind
        77
    Howlaind  
       86 天前 via Android
    点兵点将
    ziseyinzi
        78
    ziseyinzi  
       86 天前
    砂锅炒豆越炒越臭
    xnth97
        79
    xnth97  
       86 天前
    小六壬?
    perpetually
        80
    perpetually  
       86 天前
    这个很简单,脑子里面想段文字,奇数就选一,偶数就选二

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

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



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

    确实,最基本的一点:生成时会主动避开连续的 0 或 1,因为感觉「不够随机」
    1  2  
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2607 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 14:07 · PVG 22:07 · LAX 06:07 · JFK 09:07
    ♥ Do have faith in what you're doing.