2

int[3,3]すべての値で構成される整数の2次元配列(たとえば)では、配列のランダムな要素を可能な限り効率的に値0に設定したいと思います。私が遭遇している問題は、配列の最初の要素が、配列の後半にある他の要素よりも値を持つ可能性が高いことです。n11

これが私のコードです。以下の例では、3x3配列のランダムに選択された3つの要素を1に設定しようとしています。

int sum = 0;

private void MakeMatrix()
{
    for (int i = 0; i < 3; i++)
    {
        for (int k = 0; k < 3; k++)
        {
            int n = _r.Next(2);

            if (n != 1 && sum < 3)
            {
                matrix[i, k] = 1;
                sum++;
            }
            else
            {
                matrix[i, k] = 0;
            }
        }
    }
}
4

2 に答える 2

4

次のようなことを試してみてください。最初に行列をすべて 0 の値に初期化してから、以下のコードを実行します。マトリックス内の 3 つのランダム値を 1 に設定します。

int count = 0;
while (count < 3)
{
    int x = r.Next(0, 3);
    int y = r.Next(0, 3);

    if (matrix[x, y] != 1)
    {
        matrix[x, y] = 1;
        count++;
    }
}
于 2013-01-26T16:01:06.773 に答える
0
    static int sum = 0;
    private static readonly int[,] matrix = new int[3,3];
    private static readonly Random _r = new Random();
    private static void MakeMatrix()
    {
        //by default all the element in the matrix will be zero, so setting to zero is not a issue
        // now we need to fill 3 random places with numbers between 1-3 i guess ?

        //an array of int[3] to remember which places are already used for random num
        int[] used = new int[3];
        int pos;
        for (int i = 0; i < 3; i++)
        {
            pos = _r.Next(0, 8);
            var x = Array.IndexOf(used, pos);
            while (x != -1)
            {
                pos = _r.Next(0, 8);
            }
            used[i] = pos;
            matrix[pos/3, pos%3] = _r.Next(1, 3);

        }

    }
于 2013-01-26T16:19:53.493 に答える