标题:没事就折腾一下,各位大大有没有写过一定范围内按比例出随机数?
取消只看楼主
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
结帖率:86.67%
已结贴  问题点数:20 回复次数:6 
没事就折腾一下,各位大大有没有写过一定范围内按比例出随机数?
如:随机0~100的整数,0~30占70%,31~80占10%,81~100占20%这样?
搜索更多相关主题的帖子: 随机数 随机 范围 整数 
2022-12-14 09:43
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
以下是引用吹水佬在2022-12-14 10:13:23的发言:

随机0~100的整数要多少个?


暂没具体的应用场景,可以假设一下

随机0~100的整数,假设需要50个数,其中0~30占70%的机率,31~80占10%的机率,81~100占20%机率,数可以重复。
2022-12-14 11:23
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
以下是引用sam_jiang在2022-12-14 11:36:49的发言:

你这是伪随机啊,直接0-30  35个。31-80  5个。剩下的10个!


有所侧重,想起一个场景可用,就像汉字库,排前的常用字,排后的生僻字,随机挑选时希望得到常用字多些
2022-12-14 11:47
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
以下是引用cjc1010在2022-12-14 15:26:38的发言:

s1 取0-100
case s1<=10
   s2 取31-80
case s1>10 and s1<30
   s2 取80-100
other
   s2取0-30
这样可合你意?


差不多这个样子,如果是自定义比例呢?
2022-12-14 17:33
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
谢谢以上各位大大帮我理清思路

交个作业

程序代码:
clea
nMin1 = 31
nMax1 = 80
nMin2 = 81
nMax2 = 100
nMin3 = 0
nMax3 = 30
nResult = 0
lcResult = ""
For i = 0 To 100
    nRang = Int((100 - 0 + 1) * Rand( ) + 0)

    Do Case
        Case nRang <=10
            nResult = Int((nMax1 - nMin1 + 1) * Rand( ) + nMin1)
        Case Between(nRang,11,30)
            nResult = Int((nMax2 - nMin2 + 1) * Rand( ) + nMin2)
        Otherwise
            nResult = Int((nMax3 - nMin3 + 1) * Rand( ) + nMin3)
    Endcase
    lcResult = lcResult + Transform(nResult)+","
Endfor
?lcResult
2022-12-14 17:34
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
回复 11楼 吹水佬
case那里,但好像不能准确表达自定义比例
2022-12-14 18:21
shonken
Rank: 2
等 级:论坛游民
帖 子:95
专家分:21
注 册:2017-1-15
得分:0 
弄成函数

程序代码:
Clea
nMin1 = 31&&比例1的最小值范围
nMax1 = 80&&比例1的最大值范围
nMin2 = 81
nMax2 = 100
nMin3 = 0
nMax3 = 30
nRang1 = 20 &&比例1
nRang2 = 10 &&比例2
?x_RandRang(nRang1,nMin1,nMax1,nRang2,nMin2,nMax2,nMin3,nMax3)

Function x_RandRang(nRang1,nMin1,nMax1,nRang2,nMin2,nMax2,nMin3,nMax3)
    nResult = 0
    lcResult = ""
    For i = 0 To 100
        nRang = Int((100 - 0 + 1) * Rand( ) + 0)
        Do Case
            Case nRang <= nRang1
                nResult = Int((nMax1 - nMin1 + 1) * Rand( ) + nMin1)
            Case Between(nRang,nRang1 + 1 ,nRang1 + nRang2)
                nResult = Int((nMax2 - nMin2 + 1) * Rand( ) + nMin2)
            Otherwise
                nResult = Int((nMax3 - nMin3 + 1) * Rand( ) + nMin3)
        Endcase
        lcResult = lcResult + Transform(nResult)+","
    Endfor
    Return lcResult
Endfunc

2022-12-14 18:41



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




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

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