资源预览内容
第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
亲,该文档总共3页全部预览完了,如果喜欢就下载吧!
资源描述
生成不重复的随机数的三种方法下面我以生成1-10之间的10 个不重复的随机数为例介绍生成不重复的随机数的三种方法:1,通过 while 循环来实现通过 while 循环不停的生成随机数,直到生成一个不重复的为止,这种方法比较容易想到, 但是效率也比较低下,实例代码如下:static void Main(string args)int result = new int10;int tmp = -1;Random random = new Random();bool repeat = false;for (int i = 0; i 10; i+)repeat = true;while (repeat)repeat = false;tmp = random.Next(1, 11);for (int j = 0; j i; j+)if (tmp = resultj)repeat = true;break;resulti = tmp;for (int i = 0; i 10; i+)Console.WriteLine(resulti.ToString();2,通过 for 循环来实现方法1 使用了多处循环嵌套,效率十分低下,所以我应用一定的技巧来减少循环嵌套, 来达到提高程序效率的目的。主要思路是如果检测到重复,就把循环变量减1,这样来重新 进行一次循环,重新生成一个随机数,直到生成一个不重复的随机数为止,实例代码如下 static void Main(string args)int result = new int10;int tmp = -1;Random random = new Random();bool repeat = false;for (int i = 0; i 10; i+)repeat = false;tmp = random.Next(1, 11);for (int j = 0; j i; j+)if (tmp = resultj)repeat = true; break;if (!repeat)resulti = tmp;elsei = i - 1;/循环变量-1for (int i = 0; i 10; i+) Console.WriteLine(resulti.ToString();这个方法减少了一层循环嵌套,效率上有一定的改善!3,通过随机排序来实现这种方法彻底的颠覆了方法1 和2 的基本思路,先初始化一个包含数字1-10的数组,然 后每次循环取一个随机位置,将这个位置的元素和最后一个位置的元素交换!实例代码如下 static void Main(string args)int result = new int10;for (int i = 0; i 0; j-)Random r = new Random();int index = r.Next(0, j);int temp = resultindex;resultindex = resultj; resultj = temp;for (int i = 0; i 10; i+) Console.WriteLine(resulti.ToString(); 这种方法消除了循环嵌套,效率上获得了进一步的改善,但是也有一定的限制,如果要生成 5 个 1-10 之间的随机数,那这种打乱顺序的方法就无法使用了!总结:方法1 效率比较低下,一般不推荐使用!方法 2 比较通用,效率高于方法1,但是效率低于方法3方法 3 虽然效率比较高,但是只能应用与特定的情况下!
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号