CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

用rnd函数能够返回一个数的机率吗..如下:

楼主jackyhyoung(愛因思念)2005-02-25 10:30:07 在 VB / API 提问

如:  
  我想返回1-10的随机数!  
  但系我又想返回80%是1-5的数..我应该如何做呢.??  
  各位帮帮忙啊./?? 问题点数:20、回复次数:17Top

1 楼viena(维也纳N02)回复于 2005-02-25 10:49:23 得分 0

呵呵容易,用Rnd函数可以实现:  
  生成1-5的随机数,判断该数,  
  如果是1-4,生成1-5的数的随机数  
  如果是5,生成6-10的数的随机数Top

2 楼viena(维也纳N02)回复于 2005-02-25 10:51:33 得分 0

'使用Rnd的例子  
  Randomize   '随机数生成器初始化  
  MyValue   =   Int((5   *   Rnd)   +   1)     '生成1到5的随机数Top

3 楼jackyhyoung(愛因思念)回复于 2005-02-25 11:04:40 得分 0

哪样的话..我能不能够确定随机产生的八成都是1-5的数呢.  
  比如..我我不知道要出多少随机数..  
  而出随机数的时候就有八成是1-5的数!  
  这样可以做到吗.Top

4 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 11:07:59 得分 20

自己编个函数(数学术语)映射值域就行了  
   
  dim   f   as   single  
  dim   n   as   long  
   
  f   =   rnd()  
  if   f<=0.8   then  
          n   =   int(f*6.25   +   1)   '(x   /   0.8)   *   5   =   6.25  
  else  
          n   =   int((f-0.8)*25   +   1)   '   (x   /   0.2)   *   5   =   25  
  end   if  
  Top

5 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 11:09:13 得分 0

其实代数是很有用的  
  多段函数专门用来解决工程问题的  
  Top

6 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 11:10:39 得分 0

忘了+5  
   
  dim   f   as   single  
  dim   n   as   long  
   
  f   =   rnd()  
  if   f<=0.8   then  
          n   =   int(f*6.25   +   1)   '(x   /   0.8)   *   5   =   6.25  
  else  
          n   =   int((f-0.8)*25   +   1)   +   5   '   (x   /   0.2)   *   5   =   25  
  end   if  
  Top

7 楼jackyhyoung(愛因思念)回复于 2005-02-25 11:28:05 得分 0

可否说一下.  
  x   /   0.8)   *   5   =   6.25  
  (x   /   0.2)   *   5   =   25  
  这里*5的理由是什么呢..?  
  学习..  
  Top

8 楼jackyhyoung(愛因思念)回复于 2005-02-25 11:31:22 得分 0

6.25  
  25又是怎样来的啊.  
  求学!Top

9 楼jackyhyoung(愛因思念)回复于 2005-02-25 12:03:08 得分 0

不加1行吗.?Top

10 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 12:16:35 得分 0

(x   /   0.8)   *   5   =   6.25  
   
  x是在[0,0.8)区间的数  
  除以0.8后变成[0,1)区间  
  然后乘以5,变成[0,5)区间  
  再取整,值域变成{0,1,2,3,4}  
  最后+1,值域是{1,2,3,4,5}  
   
   
  至于  
  n   =   int((f-0.8)*25   +   1)   +   5   '   (x   /   0.2)   *   5   =   25  
  最后+5是为了将值域映射到{6,7,8,9,10}  
  Top

11 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 12:17:33 得分 0

6.25  
  25又是怎样来的啊.  
  求学!  
  -----------------------------------------------  
  (x   /   0.8)   *   5   =   x   *   6.25  
  (x   /   0.2)   *   5   =   x   *   25  
   
  优化代码时出现的  
  Top

12 楼jackyhyoung(愛因思念)回复于 2005-02-25 13:07:08 得分 0

~~~~~  
  高人..谢了!Top

13 楼lsftest()回复于 2005-02-25 13:30:24 得分 0

(x   /   0.8)   *   5   =   6.25  
   
  x是在[0,0.8)区间的数  
  除以0.8后变成[0,1)区间  
  然后乘以5,变成[0,5)区间  
  再取整,值域变成{0,1,2,3,4}  
  最后+1,值域是{1,2,3,4,5}  
  =======================  
  我觉得倒不如先确定区间,然后直接在该区间的值域里取值更方便:  
  Private   Sub   Command1_Click()  
  Randomize  
  Dim   f   As   Single  
  Dim   n   As   Long  
  Dim   count   As   Long  
  f   =   Rnd()  
  If   f   <=   0.8   Then  
          n   =   Int(Rnd   *   5   +   1)  
  Else  
          n   =   Int(Rnd   *   5   +   6)  
  End   If  
  End   Sub  
   
  Top

14 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 13:36:40 得分 0

判断if后没有进行缩放变换  
  Top

15 楼lsftest()回复于 2005-02-25 13:46:47 得分 0

判断if后没有进行缩放变换  
  ================================  
  为什么确定区间以后还有进行变换呢????为什么不在该区间的值域范围内再重新生成一个随机数?Top

16 楼lsftest()回复于 2005-02-25 13:47:25 得分 0

为什么确定区间以后还有进行变换呢????  
  =====================  
  为什么确定区间以后还要进行变换呢????Top

17 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2005-02-25 14:04:17 得分 0

Sorry!  
  看错了Top

相关问题

  • 请问如下构造函数
  • 如何将如下函数,转化为com接口的成员函数?
  • 如何将如下函数,转化为com接口的成员函数:
  • 请问如下构造函数定义,高分奉送!
  • pb中有没有这样一个函数啊如下
  • 我动态调用DLL的函数出现如下提示
  • 请帮我修改一下如下函数/。。。谢谢
  • 在cb中使用ODBCAPI函数编译出现如下错误!
  • 我在公用模块定义一个函数,头如下……
  • 如何实现如下功能?用什么函数

关键词

  • 函数
  • 随机数
  • rnd
  • 生成
  • 返回

得分解答快速导航

  • 帖主:jackyhyoung
  • zyl910

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo