这段随机代码帮忙解释一下。

leosh 2002-06-03 02:56:36
1、
count(i) = Int(((12-1+ 1) * Rnd) + 1)
这里的12-1+1是什么意思?简化成12行吗?

2、
for j=1 to i-1
这里为什么不是for j=1 to i

3、在其它地方看到一段教程:
****************************************************
例如,下面的脚本产生一个50到75之间的随机数(包括50和75):
<%=INT((75-50+1)*RND+50)%>
****************************************************
因此,我感觉这里的代码count(i) = Int(((12-1+ 1) * Rnd) + 1)
是不是应该改为count(i) = Int(((12-1+ 1) * Rnd) + 12)



从1-12数中随机选择5个不相同的数。

<% dim count(5)
sub rand(i)
Randomize
count(i) = Int(((12-1+ 1) * Rnd) + 1)
for j=1 to i-1
if count(i)=count(j) then
rand i
end if
next
end sub

for i=1 to 5
rand i
next

For i = 1 To 5
response.write count(i)&"<br>"

next
%>
...全文
92 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
leosh 2002-06-04
  • 打赏
  • 举报
回复
经过调试,代码没有错。
反正最终出来的结果是我所需要的。
谢谢各位了。开始结帐。THANK YOU
shadowkiss 2002-06-03
  • 打赏
  • 举报
回复
说明白了
yzx_zyj 2002-06-03
  • 打赏
  • 举报
回复
我们来推一下:
0<rnd<1
0<12*rnd<12
1<12*rnd+1<13
1<=Int(12*rnd+1)<=12

所以得到公式:产生[a,b]闭区间随机数
Int((b-a+1)*rnd+1)
julyclyde 2002-06-03
  • 打赏
  • 举报
回复
子程序自己调用自己就叫递归。这可是定义

规模没有减小那是他写错了。我看大概应该是rand j吧
saucer 2002-06-03
  • 打赏
  • 举报
回复
不是真正意义上的递归,这只是个与数组前面的值相比较的循环,再说递归是要缩小范围的,假设i=4,这循环总是
for j= 1 to 3
julyclyde 2002-06-03
  • 打赏
  • 举报
回复
是递归。坚信我没错的
saucer 2002-06-03
  • 打赏
  • 举报
回复
不是递归,看一下,假如i是1

count(1) = 1 <==假如是1,数值无关紧要
for j=1 to 1 <==i=1
if count(1)=count(1) then <==成立
rand 1 <==又开始取值,相对于跳到第一步
end if
julyclyde 2002-06-03
  • 打赏
  • 举报
回复
对。94这个意思。

递归调用的一般模式都是:问题的规模逐渐减小。所以要-1
saucer 2002-06-03
  • 打赏
  • 举报
回复
1. count(i) = Int(((12-1+ 1) * Rnd) + 1)
如果你抄得对的话,你应该可以简化成12,那么这将给你从1到12间(包括两头)间的任意整数:

0<=12*RND<12
1<=12*RND+1<13
1<=Int(12*RND+1)<=12

2.
for j=1 to i-1
从编码看,他是想看在本下标前的数字有没有跟目前的任意数相同的,如有,则重新获取新的任意数,所以不能是,
for j=1 to i
因为如果是这样的话,当j=i时
count(j) = count(i)
总成立,你将陷入永久循环
popcode 2002-06-03
  • 打赏
  • 举报
回复
1、这里没有行的意思的
count(i) = Int(((12-1+ 1) * Rnd) + 1)
这里是12-1+1再*rnd(一个随机数)再+1

2、for j=1 to i-1
这里为什么不是for j=1 to i

要看你怎么用,for j=1 to i和for j=1 to i-1不同的。
yzx_zyj 2002-06-03
  • 打赏
  • 举报
回复
我想是不是这个意思

假如有1,2,3,4,5
从中取n个不重复的随机数
n必须是<=5,不然你取的数将永远取不到
leosh 2002-06-03
  • 打赏
  • 举报
回复
OK,其它的都懂了。但下面这个还是不大明白,能否举个例子?
怎么会陷入永久循环呢?如果相同时应该会重新取值啊,总不会取100次,100次都相同吧?



2.
for j=1 to i-1
从编码看,他是想看在本下标前的数字有没有跟目前的任意数相同的,如有,则重新获取新的任意数,所以不能是,
for j=1 to i
因为如果是这样的话,当j=i时
count(j) = count(i)
总成立,你将陷入永久循环

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧