一个简单的算法,定义一个长度为n的数组,随机顺序存储1至n的的全部正整数,不重复。
前些天看到.net笔试习题集上的一道小题,要求将1至100内的正整数随机填充到一个长度为100的数组,求一个简单的算法。
今天有空写了一下。代码如下,注释比较详细:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Text.RegularExpressions; 6 7 namespace TestNumber 8 { 9 class Program 10 { 11 //定义判断正整数的正则表达式 12 public static string regex = "^[1-9][0-9]*"; 13 static void Main(string[] args) 14 { 15 16 Console.WriteLine("please input a number!"); 17 string InputStr = Console.ReadLine(); 18 //判断输入是否正整数,不是的话,结束方法 19 if (!Regex.IsMatch(InputStr,regex)) 20 { 21 Console.WriteLine("input format error !"); 22 return; 23 } 24 //转换整形 25 int InputNum=Convert.ToInt32(InputStr); 26 27 //创建整形集合,将1至n放置集合 28 List<int> NumList = new List<int>(); 29 for (int j = 1; j < InputNum+1; j++) 30 { 31 NumList.Add(j); 32 } 33 //定义一个随机数实例 34 Random R=new Random(); 35 int[] OutputNum = new int[InputNum]; 36 for (int i = 0; i < InputNum; i++) 37 { 38 //获取集合的随机一个元素 39 int k = R.Next(0, InputNum-i); 40 //将元素放置数组 41 OutputNum[i] = NumList[k]; 42 //集合移除该元素 43 NumList.RemoveAt(k); 44 } 45 foreach (var i in OutputNum) 46 { 47 Console.Write(i+","); 48 } 49 50 } 51 } 52 }
测试异常结果如下:
测试正常结果如下:
ok,that‘s all.