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

时间:2021-05-04 01:07:25

前些天看到.net笔试习题集上的一道小题,要求将1至100内的正整数随机填充到一个长度为100的数组,求一个简单的算法。

今天有空写了一下。代码如下,注释比较详细:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions; namespace TestNumber
{
class Program
{
//定义判断正整数的正则表达式
public static string regex = "^[1-9][0-9]*";
static void Main(string[] args)
{ Console.WriteLine("please input a number!");
string InputStr = Console.ReadLine();
//判断输入是否正整数,不是的话,结束方法
if (!Regex.IsMatch(InputStr,regex))
{
Console.WriteLine("input format error !");
return;
}
//转换整形
int InputNum=Convert.ToInt32(InputStr); //创建整形集合,将1至n放置集合
List<int> NumList = new List<int>();
for (int j = ; j < InputNum+; j++)
{
NumList.Add(j);
}
//定义一个随机数实例
Random R=new Random();
int[] OutputNum = new int[InputNum];
for (int i = ; i < InputNum; i++)
{
//获取集合的随机一个元素
int k = R.Next(, InputNum-i);
//将元素放置数组
OutputNum[i] = NumList[k];
//集合移除该元素
NumList.RemoveAt(k);
}
foreach (var i in OutputNum)
{
Console.Write(i+",");
} }
}
}

测试异常结果如下:

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

测试正常结果如下:

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

ok,that‘s all.