貌似是不能用数组写的
M 和 N 都不固定
M,n作为得到的参数
要从M个元素中随机N个元素进行处理
有什么好办法?
我的问题就在于第二个随机可能会得到和第一次随机相同的结果
我现在要的是这N个元素不重复
就是每个元素只能处理一次
11 个解决方案
#1
每次用数组的长度m作为随机上限,取完i之后,将A[i]同尾元素(第m个元素)交换一下,
然后用数组长度m-1作为上限取随机,这样取n个就可以了!
数据库的话,也大概使这个思路,不知道用的是哪个随机函数?
然后用数组长度m-1作为上限取随机,这样取n个就可以了!
数据库的话,也大概使这个思路,不知道用的是哪个随机函数?
#2
order by NEWID()
#3
把上次随机到的元素从M中去掉就可以了,再从新随即下一个数,递归简单点。
#4
支持一楼的,实际就是发牌算法
#5
其实我自己倒觉得如果是数据库的话,用order by NEWID()就挺好,不过不是所有数据库都支持!
#6
存储过程怎么用数组?
#7
order by NEWID()
具体怎么用
能否详细点
具体怎么用
能否详细点
#8
我的解决方法是设置了一个标志位
int i=0;
while i<n
产生随机数作为ID
检查该ID对应的标志位
如果标志位为1什么都不做再次执行循环 continue;
如果标志位为0把这个随机ID提出来并设置标志位为1并i+=1
end while
很想知道order by NEWID() 怎么用
int i=0;
while i<n
产生随机数作为ID
检查该ID对应的标志位
如果标志位为1什么都不做再次执行循环 continue;
如果标志位为0把这个随机ID提出来并设置标志位为1并i+=1
end while
很想知道order by NEWID() 怎么用
#9
Sql Server 下好像是这样!
select top 10 * from tableName Order by Newid
select top 10 * from tableName Order by Newid
#10
洗牌算法哦。。。这个问题好像在论坛讨论好多次了。。。 .NET板块最近就有2个帖子是搞这个的。。。
#11
主要是存储过程中不能用数组类的 不大好写 我早已经解决了 现在才结贴 不好意思了各位
#1
每次用数组的长度m作为随机上限,取完i之后,将A[i]同尾元素(第m个元素)交换一下,
然后用数组长度m-1作为上限取随机,这样取n个就可以了!
数据库的话,也大概使这个思路,不知道用的是哪个随机函数?
然后用数组长度m-1作为上限取随机,这样取n个就可以了!
数据库的话,也大概使这个思路,不知道用的是哪个随机函数?
#2
order by NEWID()
#3
把上次随机到的元素从M中去掉就可以了,再从新随即下一个数,递归简单点。
#4
支持一楼的,实际就是发牌算法
#5
其实我自己倒觉得如果是数据库的话,用order by NEWID()就挺好,不过不是所有数据库都支持!
#6
存储过程怎么用数组?
#7
order by NEWID()
具体怎么用
能否详细点
具体怎么用
能否详细点
#8
我的解决方法是设置了一个标志位
int i=0;
while i<n
产生随机数作为ID
检查该ID对应的标志位
如果标志位为1什么都不做再次执行循环 continue;
如果标志位为0把这个随机ID提出来并设置标志位为1并i+=1
end while
很想知道order by NEWID() 怎么用
int i=0;
while i<n
产生随机数作为ID
检查该ID对应的标志位
如果标志位为1什么都不做再次执行循环 continue;
如果标志位为0把这个随机ID提出来并设置标志位为1并i+=1
end while
很想知道order by NEWID() 怎么用
#9
Sql Server 下好像是这样!
select top 10 * from tableName Order by Newid
select top 10 * from tableName Order by Newid
#10
洗牌算法哦。。。这个问题好像在论坛讨论好多次了。。。 .NET板块最近就有2个帖子是搞这个的。。。
#11
主要是存储过程中不能用数组类的 不大好写 我早已经解决了 现在才结贴 不好意思了各位