c# - 将多维数组的 n 个随机元素设置为一个值

标签 c# random

在由所有 0 值组成的二维整数数组(例如 int[3,3])中,我想设置 尽可能高效地将数组的 n 个随机元素设置为值 1。我遇到的问题是,数组中的第一个元素比数组中后面的其他元素更有可能具有 1 值。

这是我的代码。在下面的示例中,我尝试将 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;
            }
        }
    }
}

最佳答案

您可以尝试以下操作。首先将矩阵初始化为全 0 值,然后运行下面的代码。它将矩阵中的三个随机值设置为 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++;
    }
}

关于c# - 将多维数组的 n 个随机元素设置为一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14538614/

相关文章:

c# - 如何在 Asp.net MVC 中检测爬虫

c++ - 在C++中均匀生成随机数

php - 网站文本的随机字体?

Java随机种子

python - 从列表中随机选择并替换

c# - Btrieve 没有 Pervasive?

c# - 实现 IEnlistmentNotification 时我应该在哪里执行操作?

c# - 避免从基类继承所有东西

c# - 我的客户列表已填充,但不会显示在服务器端 Blazor 的 Foreach 循环中

c++ - 为什么std::random_device类成员导致段错误?