实现原理:

方法1:使用list,通过list.contains()作为循环判断的条件,实现无重复的add

方法2:使用两组数组,all存储所有可取值,result存储结果,result依次从all中取值,all长度递减,通过索引实现all中始终保持取完后剩下的元素

分析:法1在最坏情况下会重复循环,法2通过保证每次都能取到值,很大程度上提高了效率

代码比较:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;namespace 基本语法
{class Program{static void Main(string[] args){Stopwatch watch = new Stopwatch();watch.Start();List<int> list = _GetRandom(20, 500, 400);watch.Stop();int ctrl = 0;foreach (int i in list){Console.Write("{0} ", i);++ctrl;if (ctrl % 20 == 0)Console.WriteLine();}Console.WriteLine("\nMethod 1 time used:{0}", watch.Elapsed);watch.Reset();watch.Start();int[] ia = GetRandom(20, 500, 400);watch.Stop();ctrl = 0;foreach (int i in ia){Console.Write("{0} ", i);++ctrl;if (ctrl % 20 == 0)Console.WriteLine();}Console.WriteLine("\nMethod 2 time used:{0}", watch.Elapsed);}/// <summary>/// 使用list容器产生一定范围内互不相同的随机数/// </summary>/// <param name="minVal">最小值</param>/// <param name="maxVal">最大值</param>/// <param name="amount">随机数总数</param>/// <returns>返回list<int></returns>static List<int> _GetRandom(int minVal, int maxVal, int amount){List<int> list = new List<int>();while (list.Count != amount){Random random = new Random((int)DateTime.Now.Ticks);int temp = random.Next(minVal, maxVal);if (!list.Contains(temp))list.Add(temp);}return list;}/// <summary>/// 使用数组方法实现/// </summary>/// <param name="minVal"></param>/// <param name="maxVal"></param>/// <param name="amout"></param>/// <returns>返回int[]</returns>static int[] GetRandom(int minVal, int maxVal, int amout){int[] result = new int[amout];int[] all = new int[maxVal-minVal+1];for (int ix = 0; ix!=amout;++ix ){all[ix] = minVal + ix;}Random random = new Random();int allNum = all.Length;for (int ix = 0; ix != amout;++ix ){int index=random.Next(allNum);result[ix] = all[index];all[index] = all[--allNum];}return result;}}}

运行结果:

方法1在很多情况下耗时根本无法接受。。。

转载于:https://www.cnblogs.com/leowww/archive/2013/05/20/3089715.html

生成一定范围内的互不相同的随机数的方法比较相关推荐

  1. python随机生成10个数_python得到一个10位随机数的方法及拓展

    https://blog.csdn.net/qq_33324608/article/details/78866760 无意中看到一个写10位随机数的方法,很有想法,然后就从学了一下随机数,相关东西都记 ...

  2. 《JAVA练习题目7》 定义一个素数生成器类PrimeGenerator,用于生成给定区间内的所有素数。(类PrimeGenerator都由类Main代替)

    题目内容: 定义一个素数生成器类PrimeGenerator,用于生成给定区间内的所有素数.要求PrimeGenerator类具有: 属性:start(区间起始值),end(区间终止值),两个属性均为 ...

  3. 只允许对象生成于堆内

    只允许对象生成于堆内?怎么理解?肿么办? 我们已经知道,假如手头上有一个类Person,当你在程序中写下Person objTemp;时, 编译器悄悄地做了两件事:调用constructor构造对象o ...

  4. 如何在Java中生成特定范围内的随机整数?

    如何生成特定范围内的随机int数值? 我已经尝试了以下方法,但是这些方法不起作用: 尝试1: randomNum = minimum + (int)(Math.random() * maximum); ...

  5. C/C++ 中生成特定范围内的随机数

    大家在写 C/C++ 程序时,难免会遇到要求获取某个范围内的随机数,我查阅了一些资料后,总结如下.本文分两部分,先介绍 C 语言中与随机数相关的两个函数 srand 和 rand,后介绍 C++ 中的 ...

  6. python生成50个随机数_Python内置random模块生成随机数的方法

    本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...

  7. python从random生成列表_详解Python利用random生成一个列表内的随机数

    详解Python利用random生成一个列表内的随机数 首先,需要导入random模块: import random 随机取1-33之间的1个随机数,可能重复: random.choice(range ...

  8. python产生随机数random.random_Python内置random模块生成随机数的方法

    本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...

  9. 在JavaScript中生成特定范围内的随机整数?

    如何可以生成两个指定的变量之间的随机整数在JavaScript中,例如x = 4和y = 8将输出任何的4, 5, 6, 7, 8 ? #1楼 对于具有范围的随机整数,请尝试: function ra ...

  10. C++: 生成给定范围内的所有多维索引。 模拟任意数量的嵌套循环的行为(附完整源码)

    C++: 生成给定范围内的所有多维索引. 模拟任意数量的嵌套循环的行为 test.hpp test.cpp test.hpp void revers ( int ivec[], int kdim ); ...

最新文章

  1. 除了百度,国内还有哪些无人驾驶公司?
  2. centos安装JDK与Tomcat
  3. 鸭鸭邀请------青龙毛毛
  4. 14.1 线程回顾和同步函数
  5. Github Actions:再次改变软件开发
  6. C++ JSON库:JSON for Morden C++
  7. Discuz!NT数据库读写分离方案
  8. 1859. 将句子排序
  9. 强化学习《基于策略价值 - Adventage Actor-Critic》
  10. MBG配置详解及最佳实践
  11. go 判断切片是否存在某元素_Golang基础之切片
  12. 数据分析训练营还有这些内容(Spark)
  13. 《HTML5游戏编程核心技术与实战》一2.3 图像API
  14. two points
  15. 京东登录页面html代码_利用Python爬取京东商品的一种办法
  16. PackageManager的基本使用
  17. 搜狗拼音输入法2015 v7.5 官方版​
  18. ABT Node:为去中心应用开发带来的范式迁移
  19. 2017安卓开发工程师面试题总结
  20. 视觉设计师跟平面设计_用户体验设计师应了解的6条视觉设计原则

热门文章

  1. Android踩内存工具,Android之内存分析工具
  2. windows server 系统SERVER服务消失无法共享
  3. fork和vfork,exec
  4. HBuilde H5开发,关于JSON的Storage存储
  5. cocos2d-xFinalProject踩坑记录(cocosStudio控件获取,角色移动及动画,碰撞检测,背景音乐与场景)...
  6. 大B与小b的区别(Bps与bps)
  7. JSTL不同版本和EL表达式的关联
  8. 各位玩新浪的SAE的 请点个关注http://weibo.com/i/2062352633
  9. ubuntu 12.04 下安装 PyTesser 进行OCR识别 - 从波 - 博客园
  10. 设置HTML元素的透明度