首页 > 代码库 > 一个简单的算法,定义一个长度为n的数组,随机顺序存储1至n的的全部正整数,不重复。

一个简单的算法,定义一个长度为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 Program10     {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.

一个简单的算法,定义一个长度为n的数组,随机顺序存储1至n的的全部正整数,不重复。