一个零和一个零的数组

时间:2016-03-23 17:43:59

标签: c# arrays random

如何在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这样的东西。

1 个答案:

答案 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;
        }
    }
}