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

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

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

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

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

代码如下:

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#笔试编程题的更多相关文章

  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. 第33章:MongoDB-索引--GridFS存储文件

    ①简介 GridFS是MongoDB用来存储大型二进制文件的一种存储机制.特别适合用在存储一些不常改变,但是经常需要连续访问的大文件的情况. ②GridFS的优点 1:能够简化技术栈,如果已经使用了M ...

  2. shell脚本学习-printf命令

    跟着RUNOOB网站的教程学习的笔记 printf命令模仿C程序库里的printf()程序.printf由POSIX标准所定义,因此使用printf的脚本比使用echo有着更好的移植性. printf ...

  3. pycharm 如何进行全部搜索

    界面里面先按ctrl F 弹出搜索页面 在搜索框内连续按两次shift shift可以搜索全文

  4. sublime使用技巧汇总

    sublime使用技巧 Ubuntu下安装sublime text 3143版本 Install the GPG key: wget -qO - https://download.sublimetex ...

  5. android-基础编程-ScrollView

    滚动视图(ScrollView)是指当拥有很多内容,屏幕显示不完时,需要通过滚动来显示完整的视图.包括水平滚动视图(HorizontalScrollView)和垂直滚动视图(ScrollView) 基 ...

  6. iOS逆向之Reveal

    Reveal是一个强大的UI分析工具,使用它可以查看各个界面的视图层级,在解决界面显示问题时非常有用.它最大的特点就是非常直观,查看UI布局的时候非常方便. 我们知道,Reveal官网提供的方法只能监 ...

  7. Visual Studio 2015 将json转换为实体类

    最新写的一个接口需要接收json参数,然后序列化为实体类然后再进行后面的逻辑处理.因为json中键值对比较多,逐一去手写实体中的每个属性太麻烦,于是寻思是否有这样的工具可以将json转换为实体类. 经 ...

  8. linux(centos7)安装docker

    1.检查内核版本,必须是3.10及以上 uname ‐r 2.安装docker yum install docker 3.输入y确认安装 4.启动docker [root@localhost ~]# ...

  9. 响应式网站设计(Responsive Web design)

    页面的设计与开发应当根据用户行为以及设备环境(系统平台.屏幕尺寸.屏幕定向等)进行相应的响应和调整.具体的实践方式由多方面组成,包括弹性网格和布局.图片.CSS media query的使用等.无论用 ...

  10. Windows 远程栈溢出挖掘与利用

    缓冲区溢出攻击很容易被攻击者利用,因为 C 和 C++等语言并没有自动检测缓冲区溢出操作,同时程序编写人员在编写代码时也很难始终检查缓冲区是否可能溢出.利用溢出,攻击者可以将期望数据写入漏洞程序内存中 ...