从给定数字集合中随机取不重复的数字算法
2018-01-11 21:21
288 查看
游戏开发过程中,会遇到比如:从给定的10个道具中随机生成三个给用户,要求生成的道具相互之间不重复。一般情况下,我们会将道具存储在一个集合中,然后生成一个随机数,使用生成的随机数作为集合的索引,从集合中取出对象,传递给实例化函数。这样做有一个缺点,生成的随机数是不定的,多次生成的随机数之间,可能会出现值重复,为了避免这种情况,使用下面的方法来生成随机数。
一、创建需要生成数字的种子库
二、生成一个随机值作为数组的索引,根据生成的索引访问数组
三、按照索引,将生成的随机值从数组中移除,返回剩余数组的值,即可得到三个不同的值
测试如下:
欢迎访问我的公众号:分享一些Unity项目中遇到的一些知识,也会与C++数据结构和算法相关的知识分享。
private int[] CreateRandomNumber () { List<int> nums = new List<int> (); for (int i = 1; i <= 5; i++) { nums.Add (i); } for (int i = 0; i < 2; i++) { int j = Random.Range (0, 4); nums.Remove (nums[j]); } return nums.ToArray(); }
一、创建需要生成数字的种子库
二、生成一个随机值作为数组的索引,根据生成的索引访问数组
三、按照索引,将生成的随机值从数组中移除,返回剩余数组的值,即可得到三个不同的值
测试如下:
int[] temp = CreateRandomNumber (); for (int i = 0; i < 3; i++) { Debug.Log (temp[i]); }
欢迎访问我的公众号:分享一些Unity项目中遇到的一些知识,也会与C++数据结构和算法相关的知识分享。
相关文章推荐
- 给定可能包含重复的数字的集合,返回所有可能的唯一排列。
- 随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数
- 福彩双色球中红球由6个1-33之间的数字组合,且不重复,编写代码,使用Set集合来存储随机生成的1-33的数字,然后输出生成的数字
- 算法战斗:给定一个号码与通配符问号W,问号代表一个随机数字。 给定的整数,得到X,和W它具有相同的长度。 问:多少整数协议W的形式和的比率X大?
- java经典算法_033随机生成不重复的数字
- 随机给定10个小于10的数字(出现的数字可能重复),从其中取出3个各不相同的数字可组合出多个不同的3位数,请输出这些3位数中最大的那个3位数
- C++[算法]给定一个具有100个元素的数组,请对该数组随机赋值1-100,不能出现重复的值
- 给定一组数字, 排列后得到的集合, 去掉重复的数, 求其和
- 设计一个算法,要求在20个数字中(0到19)随机选取十个数字,但是这十个数字不能重复(用C语言或者OC实现)
- (六)一个判断整形数组中是否有重复数字的简单算法
- 随机产生不重复数字
- 请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)
- 开辟一个空房间,随机生成一个有30个数的整形数组,找出其中的重复数字,输出其余数字
- 传说中百度的试题,用C#做二进制运算得到2.5亿数字中不重复数字数的O(n)算法
- Lua在给定范围内,生成指定个数不重复随机数组
- 程序员面试题精选100题(10)-排序数组中和为给定值的两个数字[算法]
- 利用random函数随机产生不重复的数字
- 不重复随机数列生成算法
- 随机生成1万个不重复的数字