非重复数字c#的随机二维数组

本文关键字:随机 二维数组 数字 | 更新日期: 2023-09-27 18:28:47

我在c#中用随机数制作了一个二维数组,但我希望这些数字不重复例如,给出输入4(x)、4(y)、15(maxElem)的成功输出为:

14 | 8 | 1 | 7

3|13|2|4

2|6|12|8

10|9|4|

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TwoDimensionArray
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 4;
            int y = 4;
            int[,] z = new int[x, y];
            Random r = new Random();
            for (int i = 0; i < x; i++)
            {
                for (int j = 0; j < y; j++)
                {
                    z[i, j] = r.Next(1, 15);
                }
            }
            for (int i = 0; i < x; i++)
            {
                for (int j = 0; j < y; j++)
                {
                    if (i == 3 && j == 3)
                    {
                        Console.Write("  ");
                        break;
                    }
                    else
                    {
                         if (z[i, j] > 9)
                            Console.Write(z[i, j] + " ");
                         else
                            Console.Write(z[i, j] + "  ");
                    }
                }
                Console.WriteLine();
            }
            Console.ReadKey();
        }
    }
}

非重复数字c#的随机二维数组

生成一个包含有效数字的数组,然后使用混洗算法随机化数组中的顺序,最后通过按顺序检索混洗数组中的值来填充二维数组。

试着这样做:

int x = 4;
int y = 4;
int[,] z = new int[x, y];
Random r = new Random();
var values =
    Enumerable
        .Range(1, x * y)
        .OrderBy(n => r.Next())
        .ToArray();
for (int i = 0; i < x; i++)
{
    for (int j = 0; j < y; j++)
    {
        z[i, j] = values[i * 4 + j];
    }
}