Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3860|回复: 14

[已解决]VB解析这个为什么 找出其中最大值最小值

[复制链接]
发表于 2017-5-1 19:35 | 显示全部楼层 |阅读模式
本帖最后由 laoau138 于 2017-5-2 20:16 编辑

VB解析这个为什么   找出其中最大值最小值

随机20个50~100范围内正数,找出其中最大值,最小值,
并计算其平均值


Sub 解析为什么()

Max = 49        '解析为什么max设49
Min = 101        '解析为什么min设101
For j = 1 To 20
x = Rnd * 50 + 50
Debug.Print Format(x, "##.00"); " ";
If j Mod 8 = 0 Then Debug.Print
s = s + x
If Max < x Then Max = x
If Min > x Then Min = x
Next
a = s / 20
Debug.Print
Debug.Print "最大值为"; Max, "最小值为"; Min, "平均值为"; a
End Sub



最佳答案
2017-5-2 20:11
laoau138 发表于 2017-5-2 20:03
请小猫用for循环来写,不喜欢for each 循环

一个循环.
  1. Sub aaa()
  2. Dim ar, i, Max, Min, s, a
  3. ReDim ar(1 To 20)
  4. Max = 49
  5. Min = 101
  6. For i = 1 To 20
  7.     ar(i) = Rnd * 50 + 50
  8.     s = ar(i) + s
  9.     If Max < ar(i) Then
  10.         Max = ar(i)
  11.     End If
  12.     If Min > ar(i) Then
  13.         Min = ar(i)
  14.     End If
  15. Next i
  16. a = s / 20
  17. MsgBox ("Max: " & Max & " Min: " & Min & " Moy: " & a)
  18. End Sub
复制代码


发表于 2017-5-1 19:49 | 显示全部楼层
50~100范围内的正整数取最大值MAX和最小值MIN,将MAX设置为49的原因是,MAX必须足够小才能与每次随机得到的数据对比,小于随机数时,就将随机数赋值给MAX,再进行下一轮对比,直至结束,找到20个随机数中的最大值,当然,不一定必须设置成49,只要小于50就行了,设为0也可以的。
MIN取值的理由相同,顺序相反。
回复

使用道具 举报

 楼主| 发表于 2017-5-1 20:10 | 显示全部楼层
大灰狼1976 发表于 2017-5-1 19:49
50~100范围内的正整数取最大值MAX和最小值MIN,将MAX设置为49的原因是,MAX必须足够小才能与每次随机得到的 ...

x = Rnd * 50 + 50      这个随机数范围是50至99    还是50至100
回复

使用道具 举报

发表于 2017-5-1 20:14 | 显示全部楼层
50<x<100,注意是小于不是小于等于。
回复

使用道具 举报

 楼主| 发表于 2017-5-1 20:19 | 显示全部楼层

永远也达不到100   ,那么Min = 101        '是否可以设置Min=100
回复

使用道具 举报

发表于 2017-5-1 20:49 | 显示全部楼层
可以的,不用过于纠结初值,你设101也好,100也好,100000000也好,遇到第一个随机数后结果都是一样的。
回复

使用道具 举报

 楼主| 发表于 2017-5-1 21:14 | 显示全部楼层
大灰狼1976 发表于 2017-5-1 20:49
可以的,不用过于纠结初值,你设101也好,100也好,100000000也好,遇到第一个随机数后结果都是一样的。

x=int(rnd*50)   与x=rnd*50  有什么区别
回复

使用道具 举报

发表于 2017-5-1 21:17 | 显示全部楼层
x=int(rnd*50):0~49的随机整数
x=rnd*50:0<x<50随机小数
回复

使用道具 举报

 楼主| 发表于 2017-5-2 08:47 | 显示全部楼层
大灰狼1976 发表于 2017-5-1 21:17
x=int(rnd*50):0~49的随机整数
x=rnd*50:0


把代码改成用数组

随机20个50~100范围内正数,找出其中最大值,最小值,

并计算其平均值


Sub 改写用数组()

Max = 49        
Min = 101        
For j = 1 To 20
x = Rnd * 50 + 50
Debug.Print Format(x, "##.00"); " ";
If j Mod 8 = 0 Then Debug.Print
s = s + x
If Max < x Then Max = x
If Min > x Then Min = x
Next
a = s / 20
Debug.Print
Debug.Print "最大值为"; Max, "最小值为"; Min, "平均值为"; a
End Sub

回复

使用道具 举报

发表于 2017-5-2 19:25 | 显示全部楼层

师父, 资料上说"Rnd 函数返回小于 1 但大于或等于 0 的值".
那么用集合表示Rnd是[0,1). 那么Rnd * 50是[0,50), Rnd * 50 + 50是[50,100).
x = Rnd * 50 + 50范围是[50,100), 大于等于50小于100.
我这样理解对不对, 希望指正

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 02:52 , Processed in 0.360679 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表