黑马程序员-传智播客资料中的面试题
2014-05-05 20:21
218 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。(要求使用两种方法)
解答:Random类是一个伪随机数算法,原理:
r(n)=(sed+r(n-1))%100;
生成的随机数是依赖于上一个的,所以叫“随机数序列”。,确定的种子产生确定的随机数序列。
为了避免每次生成的随机数序列都一样,所以一般采用当前系统运行的毫秒数
Environment.TickCount做种子。
这就明白为什么
//for(int i = 0; i < 10; i++)
//{
// Random rand = new Random();
// Console.WriteLine(rand.Next(100));
//}
是错的。
经过反编译,Random类的无参构造函数最终也是调用有参的,传递的就是当前毫秒数
这就验证了
//for(int i = 0; i < 10; i++)
//{
// Random rand = new Random();
// Console.WriteLine(rand.Next(100));
//}
为什么一样,或者一半一样,是因为在同一毫秒内。
做法1:
做法2:
先把1-100这100个数按顺序放入数组arr,再重复100次下面的操作,生成两个介于
>=0,<100 之间的随机数m、n,颠倒arr[m]和arr
的数。
效率比第一种高的多,这个只需要N次,而上一种至少需要N*N次
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。(要求使用两种方法)
解答:Random类是一个伪随机数算法,原理:
r(n)=(sed+r(n-1))%100;
class MyRand { private int seed; private int prevNumber = 10; public MyRand(int seed) { this.seed = seed; } public int Next() { int newRand = (seed + prevNumber) % 100; prevNumber = newRand; return newRand; } }
生成的随机数是依赖于上一个的,所以叫“随机数序列”。,确定的种子产生确定的随机数序列。
为了避免每次生成的随机数序列都一样,所以一般采用当前系统运行的毫秒数
Environment.TickCount做种子。
这就明白为什么
//for(int i = 0; i < 10; i++)
//{
// Random rand = new Random();
// Console.WriteLine(rand.Next(100));
//}
是错的。
经过反编译,Random类的无参构造函数最终也是调用有参的,传递的就是当前毫秒数
public Random() : this(Environment.TickCount)
这就验证了
//for(int i = 0; i < 10; i++)
//{
// Random rand = new Random();
// Console.WriteLine(rand.Next(100));
//}
为什么一样,或者一半一样,是因为在同一毫秒内。
做法1:
List<int> list = new List<int>(); Random rand = new Random(); while (list.Count < 100) { int number = rand.Next(1, 101);//>=1,<101 if (!list.Contains(number))//如果list中已经含有这个数,则不插入 { list.Add(number); } } foreach (int i in list) { Console.WriteLine(i); }
做法2:
先把1-100这100个数按顺序放入数组arr,再重复100次下面的操作,生成两个介于
>=0,<100 之间的随机数m、n,颠倒arr[m]和arr
的数。
int[] arr = new int[100]; //把100个数顺序放入 for (int i = 0; i < 100; i++) { arr[i] = i + 1; } Random rand = new Random(); for (int i = 0; i < 100; i++) { //随机生成两个位置 int m = rand.Next(0, 100); int n = rand.Next(0, 100); //颠倒两个位置 int temp = arr[m]; arr[m] = arr ; arr = temp; }
效率比第一种高的多,这个只需要N次,而上一种至少需要N*N次
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
相关文章推荐
- 黑马程序员之7K面试题-线程类补充资料
- 黑马程序员——面试题之银行业务调度系统
- 黑马程序员 7K月薪面试题破解之二 -- 银行业务调度系统
- 黑马程序员_7K面试题之交通灯管理系统
- 黑马程序员-----高薪面试题-银行业务调度系统
- 黑马程序员_java交通灯和银行业务调度面试题<十二>
- 黑马程序员-----张孝祥-7K月薪面试题破解之二_银行业务调度系统视频教程观后总结
- 黑马程序员面试题集合1(ArrayList,LinkedList,Vector,Iterator,ListIterator,HashSet,TreeSet,JDK1.5新特性泛型)
- 黑马程序员__关于学习7k月薪面试题破解的总结
- 黑马程序员_java7K面试题_交通灯管理系统
- 黑马程序员_7k面试题之交通灯管理系统
- 黑马程序员________7k面试题之银行调度系统
- 黑马程序员---空中网面试题2
- 黑马程序员--7k面试题之银行调度系统
- 黑马程序员:Java编程_7K面试题之交通灯管理系统
- 黑马程序员——逻辑值预算和面试题
- 黑马程序员——学习笔记21.7K面试题之交通灯管理系统
- 黑马程序员————七千月薪面试题学习笔记
- 传智播客&黑马程序员2014年首场.NET招聘会成功举行
- 传智培训面试题内部资料整理.