当时写在纸上的程序没有验证输入,出面试公司没多久就突然想起来这点了,囧啊!

不过当时笔试的时候想到写异常处理了。

回来上机整理了一下程序,才发现原来还会用到递归的。

当时面试官边说边出的题,问他数字是不是连续的他说这点可以忽略,不然下面的程序还可以简化,另外错误提示其实也可以再友好点,比如提示有效范围。

如果数据源中的数据本身有重复的话,下面的程序也不适用。

代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6.  
  7. namespace ConsoleApplication1
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. try
  14. {
  15. //已知一组数字,假设最大为1000个,这里就不写1000个了
  16. 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 };
  17.  
  18. //输入一个数 输出这组数中指定数量的不重复数字
  19. getDistinctRandomNum(srcArr);
  20. }
  21. catch (Exception ex)
  22. {
  23. //记录异常
  24. }
  25. }
  26.  
  27. /// <summary>
  28. /// 已知一组数字
  29. /// 输入一个数
  30. /// 输出这组数中指定数量的不重复数字
  31. /// </summary>
  32. /// <param name="srcArr">数据源</param>
  33. static void getDistinctRandomNum(List<int> srcArr)
  34. {
  35. int maxIndex = srcArr.Count - 1;
  36. string inputNumStr = Console.ReadLine();//输入
  37.  
  38. if (new Regex(@"^\d{1,}$").IsMatch(inputNumStr))//验证是否为数字
  39. {
  40. int inputNum = Int32.Parse(inputNumStr);
  41. if (inputNum <= 0 || inputNum > maxIndex)//验证范围
  42. {
  43. Console.WriteLine("输入的数字超过范围,请重新输入!");
  44. //递归调用 准备下次输入、输出
  45. getDistinctRandomNum(srcArr);
  46. }
  47. else
  48. {
  49. List<int> resultArr = new List<int>();
  50. List<int> indexArr = new List<int>();
  51. int tempIndexVal;
  52.  
  53. //生成有效数目范围内的,指定数目不重复随机数
  54. while (resultArr.Count < inputNum)
  55. {
  56. tempIndexVal = new Random().Next(0, maxIndex);
  57. if (!indexArr.Contains(tempIndexVal))
  58. {
  59. indexArr.Add(tempIndexVal);
  60. resultArr.Add(srcArr[tempIndexVal]);
  61. }
  62. }
  63.  
  64. //输出
  65. foreach (int item in resultArr)
  66. {
  67. Console.WriteLine(item);
  68. }
  69.  
  70. //递归调用 准备下次输入、输出
  71. getDistinctRandomNum(srcArr);
  72. }
  73. }
  74. else
  75. {
  76. Console.WriteLine("输入不是零或正整数,请重新输入!");
  77. //递归调用 准备下次输入、输出
  78. getDistinctRandomNum(srcArr);
  79. }
  80. }
  81. }
  82. }

一道生成不重复随机数字的C#笔试编程题的更多相关文章

  1. java生成6位随机数字

    //生成6位随机数字 System.out.println((int)((Math.random()*9+1)*100000)); //生成5位随机数字 System.out.println((int ...

  2. java中生成不重复随机的数字

    Java中产生随机数 1 . 调用java.lang下面Math类中的random()方法产生随机数 新建一个文件后缀名为java的文件,文件名取为MyRandom,该类中编写如下的代码: publi ...

  3. php生成不重复随机字符串

    使用时间戳作为原始字符串,再随机生成五个字符随机插入任意位置,生成新的字符串,保证不重复 function rand($len) { $chars='ABCDEFGHIJKLMNOPQRSTUVWXY ...

  4. Sql生成不重复的数字

    -- ============================================= -- Author:TUZI -- Create date: 2016.4.18 -- Descrip ...

  5. 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从

    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的 ...

  6. Mysql 生成不重复的随机数字

    在网上查找Mysql 生成不重复的随机数字 ,竟然没找到合适的例子. 其实思路很简单,利用MySQL现有的函数,然后进行加工处理,达到预期的结果.可以用到的MySQL函数为rand() ,以及 rou ...

  7. PHP随机生成不重复的8位卡号(数字)和卡密(字符串)

    一.生成不重复的随机数字,可自定义长度(最多支持10位数) /** * 生成不重复的随机数字(不能超过10位数,否则while循环陷入死循环) * @param int $start 需要生成的数字开 ...

  8. 利用JavaScript生成随机数字!

    <!DOCTYPE html> <html> <head> <title>1-99的随机数字</title> <script type ...

  9. Lua在给定范围内,生成指定个数不重复随机数组

    本篇主要是参考 lua连续随机数 这篇文章完成.大家可以去原贴查看学习. 生成随机数组,暂时发现两种方法 1.把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次(问了朋友,很多人都 ...

随机推荐

  1. crontab定时时间解释

    用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下: minute hour day mo ...

  2. STARTTLS is required but host does not support STARTTLS

    Spring boot 邮件系统的错误,需要修改配置的文件yml.如果是企业邮箱的话就需要进行这个配置: spring: mail: host: mail.ccds.com username: inf ...

  3. 2019swpuj2ee作业2--HTTP协议

    简介: HTTP协议:超文本传输协议.它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器.在七层模型中属于应用层.是一种请求/响应式的协议. 主要特点:   (1)支持客户端/服 ...

  4. 1131 Subway Map DFS解法 BFS回溯!

    In the big cities, the subway systems always look so complex to the visitors. To give you some sense ...

  5. [UWP]使用Picker实现一个简单的ColorPicker弹窗

    在上一篇博文<[UWP]使用Popup构建UWP Picker>中我们简单讲述了一下使用Popup构建适用于MVVM框架下的弹窗层组件Picker的过程.但是没有应用实例的话可能体现不出P ...

  6. AndroidStudio制作“我”的界面,设置,修改密码,设置密保和找回密码

    前言 大家好,给大家带来AndroidStudio制作"我"的界面,设置,修改密码,设置密保和找回密码的概述,希望你们喜欢 学习目标 掌握修改密码功能的开发,和实现用户密码的修改: ...

  7. 多个git使用的 ssh key共存

    ssh-keygen -t rsa -C "ljkj028@qq.com" 不要一直回车,指定密钥为 id_rsa_ljkj 默认为(id_rsa) 同理 创建其他密钥 打开ssh ...

  8. [git] 文件操作

    文件操作 1.  git  add 1.1 将未被git管理的文件添加到暂存区 一次可添加多个文件 文件夹,中间用空格隔开 git  add  文件/文件夹  文件/文件夹 再次执行 git  sta ...

  9. Tools - 浏览器Chrome

    Chrome HomePage:https://www.google.com/chrome/ Chrome应用商店:https://chrome.google.com/webstore/categor ...

  10. sublime text下安装插件autoprefixer

    有时候在写css样式的时候,分不清哪些属性需要前缀,哪些不需要,总是爱搞混淆了,于是autoprefixer这款插件便应运而生了.虽然在使用webpack的时候,我们可以很方便的使用这个,但是,如果项 ...