向数组中添加随机数和非递归数

本文关键字:递归 随机数 数组 添加 | 更新日期: 2023-09-27 18:27:24

如何将数字添加到数组中,使每个新数字都是随机的且不重复出现的?

试试这个

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Program
    {
        const int NUM_ROWS = 5;
        const int NUM_COLS = 7;
        static void Main(string[] args)
        {
            List<List<int>> matrix = new List<List<int>>();
            RandInt randNumbers = new RandInt(NUM_ROWS * NUM_COLS);
            int count = 0;
            for (int row = 0; row < NUM_ROWS; row++)
            {
                List<int> newRow = new List<int>();
                matrix.Add(newRow);
                for (int col = 0; col < NUM_COLS; col++)
                {
                    newRow.Add(RandInt.numbers[count++].number);
                }
            }
        }
        public class RandInt
        {
            public static List<RandInt> numbers = new List<RandInt>();
            public int number { get; set; }
            public int rand { get; set; }
            public RandInt() { }
            public RandInt(int SIZE)
            {
                Random r = new Random();
                for (int i = 0; i < SIZE; i++)
                {
                    numbers.Add(new RandInt() { number = i, rand = r.Next()}); 
                }
                numbers = numbers.OrderBy(x => x.rand).ToList();
            }
        }
    }
}
​

向数组中添加随机数和非递归数

您可以使用内置的Random类生成随机数,并使用数组函数Contains检查生成的数字是否已经在数组中。在下面的例子中,我生成一个新的数字,直到我找到一个还不在数组中的数字,然后添加它

Random rand = new Random();
int[] intArray = new int[100];
for (int i = 0; i < 100; i++)
{
    int next = 0;
    while (intArray.Contains(next = rand.Next())) { }
    intArray[i] = next;
}

注意:这种方法的一个缺点是,它可能是不终止的,因为它可以无限次地产生与数组中已经存在的数字相同的数字。然而,对于这类事情的大多数应用程序,我怀疑这会是一个问题。