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

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

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

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

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

代码如下:

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. JavaScript基础视频教程总结(001-010章)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  2. 微信小程序scroll-view 横向和纵向scroll-view组件

    scroll-view为滚动视图,分为水平滚动和垂直滚动.注意滚动视图垂直滚动时一定要设置高度否则的话scroll-view不会生效.滚动视图常用的地方一般都是Item项比较多的界面,比如我的模块 主 ...

  3. 程序猿的日常——工作中常用的Shell脚本

    工作当中总是会有很多常用的linux或者命令,这里就做一个总结 文件远程拷贝 如果想把文件从本机拷贝到远程,或者从远程下载文件到本地. # 把本地的jar拷贝到远程机器xxxip的/home/sour ...

  4. SharkApktool 源码攻略

    作者:HAI_ 原文来自:https://bbs.ichunqiu.com/thread-43219-1-1.html 0×00 前言 网上的资料对于apktool的源码分析,来来回回就那么几个,而且 ...

  5. Python队列及在微信机器人中的应用

    本文来源于i春秋学院,未经允许严禁转载. 最近打算更新微信机器人,发现机器人的作者将代码改进了很多,但去掉了sqlite数据库,需要自己根据需求设计数据库,跟作者沟通得到的建议是为了防止消息并发导致数 ...

  6. 腾讯云播放器更新——TCplayer

    概述 最近腾讯云播放器进行了更新,增加了TCplayer,支持点播播放.由于工作需要,了解了一下TCplayer,把心得记录下来,供以后开发时参考,相信对其他人也有用. 参考文档: TCPlayer开 ...

  7. 学生管理系统(springMVC)

    <Java Web编程>课程设计                                                                               ...

  8. javaScript 节流与防抖

    首先 我们要知道 节流与防抖可以干什么. 优化网络请求性能——节流 优化页面请求性能——防抖 举两个简单的小例子: 节流: 例如 有些购物页面,会有一些让你抢购的活动,到点的时候,需要你快速的点某个按 ...

  9. C语言中volatile的作用和使用方法

    在程序设计中,尤其是在C语言.C++.C#和Java语言中,使用volatile关键字声明的变量或对象通常具有与优化.多线程相关的特殊属性. 通常,volatile关键字用来阻止(伪)编译器认为的无法 ...

  10. js中break、continue和return的一般用法总结

    break break :终止break的整个循环体,包括内部所有循环.但对循环体外部的循环不影响. for(let i = 0;i<2;i++){ for(let j = 0;j<2;j ...