问:请问如何高效产生m个n范围内的不重复随机数(m<=n)
- 答:如何产生不重复的随机数?最容易想到的方法,是逐个产生这些随机数,每产生一个,都跟前面的随机数比较,如果重复,就重新产生。这是个很笨的方法,且比较次数呈线性增长,越往后次数越多。其实这些比较是多余的,完全可以不进行比较,只要反过来,按顺序产生这些数,但随机产生它们的位置。例如下面产生100个100以内不重复随机数的代码:int a[100];
for(i=99; i>=1; --i) swap(a[i], a[rand()%i]);上面这段代码只需要遍历一次就可以产生这100个不重复的随机数,它是如何做到的呢?首先第二行按顺序用0到99填满整个数组;第三行,是随机产生从0到m-2个数组下标,把这个下标的元素值跟m-1下标的元素值交换,一直进行到下标为1的元素。因此它只需要遍历一次就能产生全部的随机数。 再看下面的代码,原理跟上面例子相似,但效率比上面的差点,但仍不失为一个好方法:int a[100]={0};int i, m;for(i=1; i<=99; ++i){while(a[m=rand()%100]);a[m] = i;}这段代码也是随机产生位置,但它预先把整个数组初始化为0,然后随机产生其中一个位置,如果该元素值为0,表示这个位置还没有被使用过,就把i赋予它;否则,就重新随机产生另一个位置,直到整个数组被填满。这个方法,越到后面,遇到已使用过的元素的可能性越高,重复次数就越多,这是不及第一个方法的地方,但总的来说,效率还是不错的。
问:excel如何实现随机抽取且不重复
- 答:假如人名在A列(从A1开始)
在B1输入=INDIRECT("A"&RANDBETWEEN(1,952))拉到B400
把得到得结果复制,右击选择性粘贴为数值,再点击数据,删除重复项目
PS可能选的超过360个,把多筛选的给删掉
这样不重复筛选的360个人都出来了,你自行把他们分开B1~B90 。B91~B180。。。。 - 答:你好,E1输入=rand()
填充到E5
C1输入=INDEX($A$1:$A$5,MATCH(SMALL($E$1:$E$5,ROW()),$E$1:$E$5,0))
D1输入=INDEX($B$1:$B$5,MATCH(SMALL($E$1:$E$5,ROW()),$E$1:$E$5,0))
分别填充到C5和D5
F9按一次就随机抽取一次。
满意请采纳,谢谢。 - 答:Excel中,由952组数据中随机抽取360组不重复的数据。
方法/步骤
如果数据在Sheet2 的A:D列,在Sheet2的A列前插入两列辅助列;
在左上角的名称框中,输入A2:A953,按Enter键,将A2:A953单元格选中,输入=RAND(),按Ctrl+Enter组合键结束,快速向A2:A953单元格中输入随机数(随机数的重复机率极低);
excel如何实现随机抽取且不重复
在B2单元格输入以下公式,然后向下填充公式,得到A列数据的排名(同样没有重复排名)
=RANK(A2,A:A)
excel如何实现随机抽取且不重复
在Sheet1的A2单元格输入以下公式,然后向右向下填充公式到D361单元格,得到由Sheet2工作表中随机取得的不重复的360行数据
=VLOOKUP(ROW()-1,Sheet2!$B:$F,COLUMN(B1),0)
公式表示:以当前行号在Sheet2的B列精确匹配对应行,并返回对应第2列(Sheet2的C列)数据。
excel如何实现随机抽取且不重复
excel如何实现随机抽取且不重复
5
因随机取数时,工作表只要输入一个数据,就会在“自动计算”中 重新得到一组数据,因此,可以将Sheet2的A列,“复制”并“选择性粘贴”为“数值”,避免数据不断变换。或者将“公式”选项中的“计算选项”设置为“手动”。 - 答:1、如果数据在Sheet2 的A:D列,在Sheet2的A列前插入两列辅助列;
2、在左上角的名称框中,输入A2:A953,按Enter键,将A2:A953单元格选中,输入=RAND(),按Ctrl+Enter组合键结束,快速向A2:A953单元格中输入随机数(随机数的重复机率极低);
3、在B2单元格输入以下公式,然后向下填充公式,得到A列数据的排名(同样没有重复排名)
=RANK(A2,A:A)
4、在Sheet1的A2单元格输入以下公式,然后向右向下填充公式到D361单元格,得到由Sheet2工作表中随机取得的不重复的360行数据
=VLOOKUP(ROW()-1,Sheet2!$B:$F,COLUMN(B1),0)
公式表示:以当前行号在Sheet2的B列精确匹配对应行,并返回对应第2列(Sheet2的C列)数据。
5、因随机取数时,工作表只要输入一个数据,就会在“自动计算”中 重新得到一组数据,因此,可以将Sheet2的A列,“复制”并“选择性粘贴”为“数值”,避免数据不断变换。或者将“公式”选项中的“计算选项”设置为“手动”。
6、注意:通过RANDBETWEEN函数得到随机函数的方法,会出现重复数据,从而达不到既随机又唯一取数的目的,没有RAND得到一列不重复的随机数再排名来得科学有效。 - 答:参考这个
抽取姓名后用VLOOKUP查出其它 - 答:如果把952条数据随机打乱,然后抽取1-40,41-80等等,这样应该也可以实现随机抽取不重复的目的。可以新建一列,输入公式rand(),下拉至952,选择新建列,复制粘贴为数值,所有列按照新建列的数值进行排序。
这个公式可以随机生成0-1之间的数据
问:如何高效地产生多个不重复的随机数
- 答:库仑定律是静止点电荷相互作用力的规律。1785年法国科学家C,-A.de库伦由实验得出,真空中两个静止的点电荷之间的相互作用力同它们的电荷量的乘积成正比,与它们的距离的二次方成反比,作用力的方向在它们的连线上,同名电荷相斥,异名电荷相吸。
- 答:如何高效地产生多个不重复的随机数以C为例,给你提供一种参考:#include "stdio.h"#include "stdlib.h"#include "time.h"int...
- 答:先在A1:A8中输入相同的公式:
=INT(RAND()*15+1)
再在B1中输入下面公式,并拖动复制到B8格,如果A列中有重复,B列对应的格会显示大于1的数字,等于1为不重复。
=COUNTIF($A$1:$A$8,A1)
然后按键盘上方的F9功能键,直到B列格中都是1,就行了。