一道生成不重复随机数字的C#笔试编程题
2014-02-14 16:33
423 查看
当时写在纸上的程序没有验证输入,出面试公司没多久就突然想起来这点了,囧啊!
不过当时笔试的时候想到写异常处理了。
回来上机整理了一下程序,才发现原来还会用到递归的。
当时面试官边说边出的题,问他数字是不是连续的他说这点可以忽略,不然下面的程序还可以简化,另外错误提示其实也可以再友好点,比如提示有效范围。
如果数据源中的数据本身有重复的话,下面的程序也不适用。
代码如下:
不过当时笔试的时候想到写异常处理了。
回来上机整理了一下程序,才发现原来还会用到递归的。
当时面试官边说边出的题,问他数字是不是连续的他说这点可以忽略,不然下面的程序还可以简化,另外错误提示其实也可以再友好点,比如提示有效范围。
如果数据源中的数据本身有重复的话,下面的程序也不适用。
代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { try { //已知一组数字,假设最大为1000个,这里就不写1000个了 List<int> srcArr = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; //输入一个数 输出这组数中指定数量的不重复数字 getDistinctRandomNum(srcArr); } catch (Exception ex) { //记录异常 } } /// <summary> /// 已知一组数字 /// 输入一个数 /// 输出这组数中指定数量的不重复数字 /// </summary> /// <param name="srcArr">数据源</param> static void getDistinctRandomNum(List<int> srcArr) { int maxIndex = srcArr.Count - 1; string inputNumStr = Console.ReadLine();//输入 if (new Regex(@"^\d{1,}$").IsMatch(inputNumStr))//验证是否为数字 { int inputNum = Int32.Parse(inputNumStr); if (inputNum <= 0 || inputNum > maxIndex)//验证范围 { Console.WriteLine("输入的数字超过范围,请重新输入!"); //递归调用 准备下次输入、输出 getDistinctRandomNum(srcArr); } else { List<int> resultArr = new List<int>(); List<int> indexArr = new List<int>(); int tempIndexVal; //生成有效数目范围内的,指定数目不重复随机数 while (resultArr.Count < inputNum) { tempIndexVal = new Random().Next(0, maxIndex); if (!indexArr.Contains(tempIndexVal)) { indexArr.Add(tempIndexVal); resultArr.Add(srcArr[tempIndexVal]); } } //输出 foreach (int item in resultArr) { Console.WriteLine(item); } //递归调用 准备下次输入、输出 getDistinctRandomNum(srcArr); } } else { Console.WriteLine("输入不是零或正整数,请重新输入!"); //递归调用 准备下次输入、输出 getDistinctRandomNum(srcArr); } } } }
相关文章推荐
- C#的排序算法以及随机产生不重复数字的几个Demo
- C# .NET Random 生成随机数字和字母
- 开辟一个空房间,随机生成一个有30个数的整形数组,找出其中的重复数字,输出其余数字
- 生成随机不重复数列表(C#)
- C#在一段数字区间内随机生成若干个互不相同的随机数
- 随机生成10个不重复的0-100的数字
- 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从
- C#随机不重复数字字符串2
- 随机生成30个数字(范围0-30)存到一个数组中,将数组中重复的数字去除,动态创建数组保存剩下的数字
- C#随机生成数字、字母
- C#在一段数字区间内随机生成若干个互不相同的随机数
- 生成8位随机不重复的数字编号
- 生成大小为100的数组,从1到100,随机插入,不连续,也不重复[C#]
- C#中随机生成一串字母+数字的字符串
- java 一个int数组 长度为100 随机生成100个数 即1-100 将其插入进数组 插入的数字不能重复
- C# 生成验证码,取随机数字加字母
- C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密
- SQLServer如何快速生成100万条不重复的随机8位数字
- ASP生成不重复随机数字的另类思路