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

2016 年 11 月 29 日
 soeasy

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

2359 次点击
所在节点    问与答
17 条回复
line
2016 年 11 月 29 日
预先减好,不行吗?
woniu127
2016 年 11 月 29 日
每次生成一个 4-5 的随机数不就行了
woniu127
2016 年 11 月 29 日
给个 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
2016 年 11 月 29 日
好像看错了楼主的意思,我再想想
soeasy
2016 年 11 月 29 日
@woniu127 嗯,随机数要递减下去,不能比之前的大
debiann
2016 年 11 月 29 日
这随便选个递减函数,取点, smear 一下就行了吧。需要严格递减就每个点都判断下。怎么搞都可以啊
woniu127
2016 年 11 月 29 日
这样应该可以了。
```
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
2016 年 11 月 29 日
回复似乎不支持 markdown
woniu127
2016 年 11 月 29 日
我把循环这块空出来

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
2016 年 11 月 29 日
plot (1000 + 100 * sin(x) )(1 - x / 200) from 0 to 250
soeasy
2016 年 11 月 29 日
@woniu127 谢谢您的耐心解答,我试下看
soeasy
2016 年 11 月 29 日
@binux 谢谢,但是你这个我看的不怎么明白
xxxyyy
2016 年 11 月 29 日
@soeasy 把它放到 Google 搜索里就可以看到图像了
soeasy
2016 年 11 月 29 日
@xxxyyy 原来还能这样,学习了
binux
2016 年 11 月 29 日
@xxxyyy 这个不好理解

用这个 plot (10 + sin(x) )(1 - x / 200) from 0 to 250 , x 为当前砍价人数,公式算出来的就是减多少。
misaka20038numbe
2016 年 11 月 30 日
商品 1000 元,每次大概砍 5%左右,200 次之后是 0.03 元,保证每次都比前一次砍的少.
bxb100
2016 年 11 月 30 日
缩放的想法很赞

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/324200

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX