如何在C#中生成0和1的数组?数组的长度为 n ,而 k 单位,其中 k <= n 。单位在 k 随机位置。例如,如果 n = 10 且 k = 3 :0010010100或0011010000。
代码
static void InitIntArray(int[] arr)
{
Random rnd = new Random();
for (int i = 0; i < arr.Length; i++)
{
int k=2;
for (int j = 0; j < k; j++)
{
arr[j] = 1;
}
arr[i] = 0;
}
int[] arr1 = new int[5];
InitIntArray(arr1);
foreach (int i in arr1)
{
Console.Write(i);
}
Console.WriteLine();
}
输出为11000。 我不能得到像01010或00101这样的东西。
答案 0 :(得分:1)
您需要使用Random实例的函数来获取随机数(例如,使用Random.NextDouble()),然后使用这些数字来确定数组的每个元素是零还是一。否则,您的代码将如您所料,每次都会产生相同的结果。
static void InitIntArray(int[] arr, int k){
Random rnd = new Random();
for(int i = 0; i < arr.Length; i++)
{
//Probability this array element is a 1
double p = (double)k / (arr.Length-i);
if(rnd.NextDouble() < p)
{
arr[i] = 1;
k--;
}
else
{
arr[i] = 0;
}
}
}