标题:没事就折腾一下,各位大大有没有写过一定范围内按比例出随机数?
只看楼主
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:3 
以下是引用shonken在2022-12-14 09:43:38的发言:

如:随机0~100的整数,0~30占70%,31~80占10%,81~100占20%这样?

好像是可以这样做
1.取各段的数量
段1 = int(总数) * 0.7
段2 = int(总数) * 0.1
段3 = int(总数) * 0.2
或者这样
段2 = int(总数) * 0.1
段3 = int(总数) * 0.2
段1 = 总数 - 段2 - 段3
2.用循环分别取对应的段位的随机数
我记得,好像可以这样的
*0~30段位
for i=1 to 30
?int(rand()*30)
endfor
*31~80段位
for i=1 to 80
?int(rand()*50)+30
*81~100段位
for i=1 to 20
?int(rand()*20)+80
endfor



[此贴子已经被作者于2022-12-17 08:14编辑过]

2022-12-17 08:02
cssnet
Rank: 4
等 级:业余侠客
威 望:4
帖 子:317
专家分:203
注 册:2013-10-4
得分:3 
创建一个表dbfInt.dbf,就一个整型数字段aint。
或者,定义一个数组Dime aint[1000]
生成1000个数值在要求范围以内的随机数,必要时,生成1万个也行。

=rand(-1)
for i=1 to 1000
    lnInt = int(rand()*100)
    insert into dbfInt (aint) value (lnInt)
endfor i

然后,自上而下,往后扫描这张表,取到合适的,0--30,就留下,不合适的跳过,至取满所需个数;
继续,从下一条记录开始,往后扫描这张表,取到合适的,31--70,就留下,不合适的跳过,至取满所需个数;
继续,从下一条记录开始,往后扫描这张表,取到合适的,71--100,就留下,不合适的跳过,至取满所需个数。
……全剧终。
2022-12-17 08:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510943-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014315 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved