一道生成不重复随机数字的C#笔试编程题
当时写在纸上的程序没有验证输入,出面试公司没多久就突然想起来这点了,囧啊!
不过当时笔试的时候想到写异常处理了。
回来上机整理了一下程序,才发现原来还会用到递归的。
当时面试官边说边出的题,问他数字是不是连续的他说这点可以忽略,不然下面的程序还可以简化,另外错误提示其实也可以再友好点,比如提示有效范围。
如果数据源中的数据本身有重复的话,下面的程序也不适用。
代码如下:
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#笔试编程题的更多相关文章
- java生成6位随机数字
//生成6位随机数字 System.out.println((int)((Math.random()*9+1)*100000)); //生成5位随机数字 System.out.println((int ...
- java中生成不重复随机的数字
Java中产生随机数 1 . 调用java.lang下面Math类中的random()方法产生随机数 新建一个文件后缀名为java的文件,文件名取为MyRandom,该类中编写如下的代码: publi ...
- php生成不重复随机字符串
使用时间戳作为原始字符串,再随机生成五个字符随机插入任意位置,生成新的字符串,保证不重复 function rand($len) { $chars='ABCDEFGHIJKLMNOPQRSTUVWXY ...
- Sql生成不重复的数字
-- ============================================= -- Author:TUZI -- Create date: 2016.4.18 -- Descrip ...
- 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的 ...
- Mysql 生成不重复的随机数字
在网上查找Mysql 生成不重复的随机数字 ,竟然没找到合适的例子. 其实思路很简单,利用MySQL现有的函数,然后进行加工处理,达到预期的结果.可以用到的MySQL函数为rand() ,以及 rou ...
- PHP随机生成不重复的8位卡号(数字)和卡密(字符串)
一.生成不重复的随机数字,可自定义长度(最多支持10位数) /** * 生成不重复的随机数字(不能超过10位数,否则while循环陷入死循环) * @param int $start 需要生成的数字开 ...
- 利用JavaScript生成随机数字!
<!DOCTYPE html> <html> <head> <title>1-99的随机数字</title> <script type ...
- Lua在给定范围内,生成指定个数不重复随机数组
本篇主要是参考 lua连续随机数 这篇文章完成.大家可以去原贴查看学习. 生成随机数组,暂时发现两种方法 1.把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次(问了朋友,很多人都 ...
随机推荐
- 执行PowerShell脚本的时候出现"在此系 统上禁止运行脚本"错误
使用get-executionpolicy查看当前的脚本执行策略, 默认是Restricted, 也就是不允许任何脚本运行. 此时应该使用set-executionpolicy remotesigne ...
- [ 9.26 ]CF每日一题系列—— 771B递推问题
Description: 给定你命名的规律,1-10个字符,开头必须大写,最多有50个名字,然后告诉你有n个人,判断区间长度为k,那么你将得到n - k + 1个答案(YES or NO) 表示1 - ...
- [转]data-driven与决策树聚类的两种方法
参考文章: http://blog.csdn.net/quheDiegooo/article/details/60873999 http://blog.csdn.net/quhediegooo/art ...
- docker 安装 RabbitMQ
1.镜像中国(http://www.docker-cn.com/registry-mirror):直接使用https://hub.docker.com下载镜像比较慢,使用镜像中国加速 使用例子:$ d ...
- Alpha冲刺(5/10)——2019.4.28
所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(5/10)--2019.4.28 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...
- springmvc接受及响应ajax请求。 以及@RequestBody 和@ResponseBody注解的使用
1.发送ajax请求 $.ajax({ url:"user/testAjax", contentType:"application/json;charset=UTF-8& ...
- Akka-Cluster(2)- distributed pub/sub mechanism 分布式发布/订阅机制
上期我们介绍了cluster singleton,它的作用是保证在一个集群环境里永远会有唯一一个singleton实例存在.具体使用方式是在集群所有节点部署ClusterSingletonManage ...
- redis key的过期时间
设置redis key的生存过期时间 Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除) : EXPlRE 命令用于将键key 的生存时间设置为tt ...
- web API简介(三):客户端储存之Web Storage API
概述 前篇:web API简介(二):客户端储存之document.cookie API 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据. W ...
- LinkedList 的源码分析
LinkedList是基于双向链表数据结构来存储数据的,以下是对LinkedList 的 属性,构造器 ,add(E e),remove(index),get(Index),set(inde,e)进 ...