V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
soeasy
V2EX  ›  问与答

请教一个随机递减数算法的问题

  •  
  •   soeasy · 2016-11-29 21:26:14 +08:00 · 1916 次点击
    这是一个创建于 2921 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求大概是这样:一个砍价的,商品定价为 1000 元。要求 200-250 人砍完,别人帮你砍价的金额是依次递减的,并且是无规律(至少看不出)的随机数,请问怎么实现(本人使用 Java 语言)?

    17 条回复    2016-11-30 08:14:50 +08:00
    line
        1
    line  
       2016-11-29 22:00:38 +08:00
    预先减好,不行吗?
    woniu127
        2
    woniu127  
       2016-11-29 22:02:12 +08:00
    每次生成一个 4-5 的随机数不就行了
    woniu127
        3
    woniu127  
       2016-11-29 22:09:22 +08:00
    给个 python 的,不会 java.
    import random
    b = 1000
    i = 0
    while b>0:
    a = random.uniform(4, 5)
    b = b - a
    i = i+1
    print(i)
    woniu127
        4
    woniu127  
       2016-11-29 22:11:18 +08:00
    好像看错了楼主的意思,我再想想
    soeasy
        5
    soeasy  
    OP
       2016-11-29 22:24:25 +08:00
    @woniu127 嗯,随机数要递减下去,不能比之前的大
    debiann
        6
    debiann  
       2016-11-29 22:31:19 +08:00 via iPhone
    这随便选个递减函数,取点, smear 一下就行了吧。需要严格递减就每个点都判断下。怎么搞都可以啊
    woniu127
        7
    woniu127  
       2016-11-29 22:31:41 +08:00
    这样应该可以了。
    ```
    import random
    a = random.uniform(200,250)
    b = 1000/a
    d = []
    for i in range(int(a/2)):
    c = random.uniform(0,2*b)
    e = 2*b-c
    d.append(c)
    d.append(e)
    d.append(1000-sum(d))
    d.sort(reverse=True)
    print(d)
    print(sum(d))

    ```
    woniu127
        8
    woniu127  
       2016-11-29 22:32:13 +08:00
    回复似乎不支持 markdown
    woniu127
        9
    woniu127  
       2016-11-29 22:34:46 +08:00   ❤️ 1
    我把循环这块空出来

    import random
    a = random.uniform(200,250)
    b = 1000/a
    d = []


    for i in range(int(a/2)):
    c = random.uniform(0,2*b)
    e = 2*b-c
    d.append(c)
    d.append(e)


    d.append(1000-sum(d))
    d.sort(reverse=True)
    print(d)
    print(sum(d))
    binux
        10
    binux  
       2016-11-29 22:36:55 +08:00   ❤️ 4
    plot (1000 + 100 * sin(x) )(1 - x / 200) from 0 to 250
    soeasy
        11
    soeasy  
    OP
       2016-11-29 22:44:23 +08:00
    @woniu127 谢谢您的耐心解答,我试下看
    soeasy
        12
    soeasy  
    OP
       2016-11-29 22:45:11 +08:00
    @binux 谢谢,但是你这个我看的不怎么明白
    xxxyyy
        13
    xxxyyy  
       2016-11-29 22:57:40 +08:00 via Android   ❤️ 1
    @soeasy 把它放到 Google 搜索里就可以看到图像了
    soeasy
        14
    soeasy  
    OP
       2016-11-29 23:03:45 +08:00
    @xxxyyy 原来还能这样,学习了
    binux
        15
    binux  
       2016-11-29 23:19:32 +08:00
    @xxxyyy 这个不好理解

    用这个 plot (10 + sin(x) )(1 - x / 200) from 0 to 250 , x 为当前砍价人数,公式算出来的就是减多少。
    misaka20038numbe
        16
    misaka20038numbe  
       2016-11-30 00:00:44 +08:00   ❤️ 3
    商品 1000 元,每次大概砍 5%左右,200 次之后是 0.03 元,保证每次都比前一次砍的少.
    bxb100
        17
    bxb100  
       2016-11-30 08:14:50 +08:00 via Android
    缩放的想法很赞
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3138 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 13:55 · PVG 21:55 · LAX 05:55 · JFK 08:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.