返回

生成不重复的随机数:方法巧妙,省时省力!

前端

各位程序员朋友,大家好!今天,我要和大家分享一个看似简单却非常实用的技巧:如何在给定范围内生成不重复的随机数。这个技巧非常有用,可以应用于各种场景,如抽奖、生成验证码等。我们一起探索一下其中的奥秘吧!

1. 巧用数组下标

首先,我们介绍一种非常直观的做法,即使用数组下标来存储生成的随机数。具体步骤如下:

  1. 创建一个大小为给定范围的数组。
  2. 依次生成随机数,并将其存储到数组中。
  3. 如果随机数已经存在于数组中,则重新生成随机数。
  4. 重复步骤 2 和 3,直到数组中存储了所有不重复的随机数。

这种方法非常简单易懂,但它的效率较低,尤其当给定范围较大时。

2. 优化后的算法

为了提高效率,我们可以对上述算法进行优化。我们不再使用数组来存储生成的随机数,而是利用随机数的特性来避免重复:

  1. 生成一个随机数。
  2. 从给定范围内随机选择一个位置。
  3. 如果该位置上的数字与生成的随机数不同,则将该位置上的数字与生成的随机数交换。
  4. 重复步骤 1 至 3,直到所有随机数都不重复。

这种优化后的算法效率比第一种方法高很多,尤其当给定范围较大时。

代码示例

以下是一个使用优化后算法的 C# 代码示例:

using System;
using System.Collections.Generic;

namespace RandomUniqueNumbers
{
    class Program
    {
        static void Main(string[] args)
        {
            // 给定范围
            int range = 10;

            // 生成不重复随机数
            List<int> numbers = new List<int>();
            for (int i = 0; i < range; i++)
            {
                int randomNumber = new Random().Next(1, range + 1);
                int index = new Random().Next(0, numbers.Count);
                if (numbers[index] != randomNumber)
                {
                    numbers[index] = randomNumber;
                }
            }

            // 输出结果
            foreach (int number in numbers)
            {
                Console.WriteLine(number);
            }
        }
    }
}

总结

以上就是生成不重复随机数的两种方法。大家可以根据自己的实际需求选择适合的方法。希望这个技巧能够帮助你们在开发中更游刃有余!