我有这样的代码:
Random num = new Random();
int check = CheckIfOdd(num.Next(1, 1000000));
int counter = 1;
while (check <= 0)
{
if (check % 2 == 0)
{
check = CheckIfOdd(num.Next(1, 1000000)); ;
}
counter++;
}
int[] nArray = new int[check];
int arLength = 0;
//generate arrays with pairs of numbers, and one number which does not pair.
for (int i = 0; i < check; i++)
{
arLength = nArray.Length;
if (arLength == i + 1)
{
nArray[i] = i + 1;
}
else
{
nArray[i] = i;
nArray[i + 1] = i;
}
i++;
}
这确实有点儿工作,但不是还有我想。
它应该产生与1之间的阵列 - 元素1万元,人数之内可以是1之间 - 十亿1。
它具有使2对每个数字的,在该阵列中的随机位置(它现在不),然后它应包含1号,其具有一对没有...
我只是在寻找做一个更好的方式,因为它不是在随机位置,并且它不正确1- 1十亿之间产生的数字。
编辑我已经提出这样的:(由oerkelens)
var total = new Random().Next(500000) * 2 + 1;
var nArray = new int[total];
for (var i = 1; i < total; i += 2)
{
nArray[i] = i;
nArray[i - 1] = i;
}
nArray[total - 1] = total;
哪一个更好,而不是尽可能多的代码,但它不会使这些值按随机顺序。
编辑2这几乎做什么,我需要的,但它不会产生各适量。 如所述的,它应产生最大为x的元素,以1-Y之间的数
Random r = new Random();
int[] output = Enumerable.Range(0, 11).Select(x => x / 2).OrderBy(x => r.Next()).ToArray();
通过Enigmativity