从数组中随机抽取不重复的数

tonyliuchenjun 2005-10-11 10:19:02
我想从数组中随机抽取不重复的20个数,为什么总是有重复的呀不明白

dim n(50)
c=20
c=Cint(c)
for i=1 to c
Randomize
n(i)=Int(j* Rnd+1)
for q=1 to i
if n(i)=n(q-1) then
n(i)=q+1
end if
next

response.write n(i)&"<br>"
next
...全文
314 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
black325 2005-10-11
  • 打赏
  • 举报
回复
学习。
sjjf 2005-10-11
  • 打赏
  • 举报
回复
js版
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
//数据源大小
var iSize = 50;
var vDataSource = new Array(iSize);

//初始化数据源
var i = 0;
for(i = 0 ;i< iSize;i++) vDataSource[i] = i;

//需要的不重复的个数
var iNeed = 20;
var invalidFlag = -1; //无效标志
var strShow = new String(""); //需要显示的串

for (i = 0 ;i < iNeed;i++)
{
//产生随机位置
iPos = Math.ceil(Math.random() * (iSize-i));
var iCount = 0;
var j = 0;
for(j = 0 ;j < iSize ;j++)
{
if (vDataSource[j] != invalidFlag )
{
iCount++;
if (iCount == iPos)
{
strShow = strShow + (strShow==""?"":",") + vDataSource[j];
vDataSource[j] = invalidFlag;
break;
}
}
}
}
alert(strShow);

//-->
</SCRIPT>
</BODY>
</HTML>
低调的小青蛙 2005-10-11
  • 打赏
  • 举报
回复
算法描述:
抽取的时候,使用

index = 50 * rnd + 1;
(第一个) = n[index];

抽取了第一个以后,你把,第 index 个与第 50 个进行交换位置,
然后在剩下的49个中,进行第二个

index = 49 * rnd + 1;
(第二个) = n[index];

采用这种算法以此类推:

count = 50
for i=1 to 20
index = count * rnd + 1
response.write( n[index] )

t = n[index]
n[index] = n[count]
n[count] = t

count = count - 1
next
daiq8473 2005-10-11
  • 打赏
  • 举报
回复
呵呵, if n(i)=n(q-1) then
n(i)=q+1
end if
这里有点问题了,你要这么写的话,可以考虑一下加一个goto语句了,当重复时跳到for i=1 to c当然还要记得i--;
sulone 2005-10-11
  • 打赏
  • 举报
回复
n(i)=Int(j* Rnd+1)其中的j没有定义呀,每次调用都是0。所以出来的结果都是从1排到21。
将j换成i以后,其中一次的结果是:1
3
4
2
6
5
8
9
7
10
11
12
14
15
16
17
18
19
20
21
并没有什么重复的呀。
lnboy1003 2005-10-11
  • 打赏
  • 举报
回复

28,406

社区成员

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

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