• 面试题:产生一个长度为100的数组,为数组中的每一项随机填充1100之间的数并且保证不重复 (C#实现)


     

    为了尽快完成面试,第一反应就是想到先创建数组,然后随机产生1-100的数字,再与数组进行比较,数组中没有此数字时进行比较,虽然这种方法不好,但能够实现功能。示例代码如下:

    static void Main(string[] args)

    int[] num = new int[100];

     

    List<int> temp = new List<int>();

     

    Random rand = new Random();

    int number = 0;

    for (int index = 0; index < num.Length; index++)

    {

            do

            {

                //随机产生1-100的数字

                number = rand.Next(1, 100);

            }while(temp.IndexOf(number) != -1);

       

            num[index] = number;

            temp.Add(number);

    }

    //显示数据

    foreach (int item in num)

    {

            Console.Write(string.Format("{0}\t", item));

    }

    Console.Read();

    回家后,上机编写代码进行测试,发现上面这个方法不仅不好,而且效率非常低,根本显示不出数据。

    经过思考:1-100之间的数,产生一个长度为100的数组,不就是将这一百个数填充的数组中吗,只是填充的位置可以随机是产生而已。为此写下如下实现程序:

    static void Main(string[] args)

    {

    int[] num = new int[100];

    Random rand = new Random();

    int number = 1;

    for (int index = 0; index <= 99; index++)

    {

        num[index] = number++;

       

        //随机产生数组下标

        int randIndex = rand.Next(0, index);

        //进行数据替换

        int temp = num[randIndex];

        num[randIndex] = num[index];

        num[index] = temp;

    }

    foreach (var item in num)

    {

     Console.Write(string.Format("{0}\t",item));

    }

     

    Console.Read();

    }

        这样实现好像不太符合考题要求,只随机打乱已经填充的数据。经过再次思考,还可采用先准备一个1-100的数据集合,使用随机方式获取集合中的数字到数组中,获取过的数字进行移除后,再进行随机获取。

        实现程序如下:

    class Program

        {

            static void Main(string[] args)

            {

                List<int> list = new List<int>();

                for (int number = 1; number <= 100; number++)

                {

                    list.Add(number);

                }

                //随机获取列数中的一个数字,获取完后,移除此数字

                int[] num = new int[100];

                Random rand = new Random();

                int listIndex = 0;

                for (int index = 0; index <= 99; index++)

                {

                    listIndex = rand.Next(0, list.Count);

                    num[index] = list[listIndex];

                   

                    list.Remove(num[index]);

                }

                //显示数据

                foreach (int item in num)

                {

                    Console.Write(string.Format("{0}\t", item));

                }

                Console.Read();

            }

        }

        这样实现效率比较高,也符合题目要求,随机组成组成。

    不知这个题目是谁先想到考我们的,这样实现是否达到老师的要求,是否还有更好的实现方法?欢迎赐教!

     

  • 相关阅读:
    linux就该这么学.pdf
    linux中shell编辑小技巧
    相关功能分享
    现代操作系统第三版高清.pdf中文版免费下载
    linux高性能服务器编程pdf免费下载
    git每次更新都需要输入账号密码,如何解决?
    Python 面向对象
    模块和包
    Python常用模块(collections、 time、 random、 os 、sys、序列化模块)
    内置函数和匿名函数(lambda)
  • 原文地址:https://www.cnblogs.com/henxiao25/p/2083054.html
Copyright © 2020-2023  润新知