给定一个从0开始的n个连续数的整数数组,即
0,1,2,..n
我想随机选择 n/2
个数字。
假设 n=5
那么可能的集合将是 0,3,5
。
如何轻松实现?
最佳答案
您可以遍历数字并确定每个数字出现在结果中的概率:
int n = 5;
int left = (n + 1) / 2;
int[] result = new int[left];
Random rnd = new Random();
for (int i = 0; left > 0; i++) {
if (rnd.Next(n + 1 - i) < left) {
result[result.Length - left] = i;
left--;
}
}
注意:这将始终产生排序结果。
编辑:
这是一个创建 200000000 个结果的测试运行,计算生成的组合(其中二进制数表示组合,例如 100110 是 0、3、4):
010011 : 9999164
110001 : 10003346
010101 : 9990975
100101 : 9998154
101001 : 10006305
100110 : 10003350
101010 : 10000583
101100 : 9995335
011001 : 10000007
001011 : 10001492
001110 : 10001158
100011 : 9994680
110100 : 9998226
110010 : 9999954
011010 : 10002269
000111 : 10004752
010110 : 9996886
011100 : 9999196
111000 : 10001094
001101 : 10003074
关于c# - 从n个连续数字中随机选择数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14535421/