<strike id="rrvnz"></strike>

    <noframes id="rrvnz">
    <noframes id="rrvnz"><span id="rrvnz"><pre id="rrvnz"></pre></span><address id="rrvnz"></address>
    <address id="rrvnz"><nobr id="rrvnz"></nobr></address><noframes id="rrvnz">
      <em id="rrvnz"></em>

        首 頁IT知識庫翔宇問吧收藏本站
        當前位置:翔宇亭IT樂園IT知識庫C#專區算法設計

        C#中生成隨機不重復數列的算法

        減小字體 增大字體 作者:cnblogs:Fly_Elephant  來源:轉載整理  發布時間:2017-03-24 10:51:31

        給定一個正整數n,需要輸出一個長度為n的數組,數組元素是隨機數,范圍為0 – n-1,且元素不能重復。比如 n = 3 時,需要獲取一個長度為3的數組,元素范圍為0-2;簡單的理解就是生成一個無序的隨機數組。

        using System;

        using System.Collections.Generic;

        using System.Linq;

        using System.Text;

        using System.Threading.Tasks;

        namespace RandomNumber

        {

            class Program

            {

                static void Main(string[] args)

                {

                    //初始化一個數組,如果數組沒有賦值,默認是0

                    //int[] arr = SolveProblemWayOne(5);

                    //int[] arr = SolveProblemWaySecond(5);

                    //int[] arr = SolveProblemWayThird(10);

                    int[] arr = SolveProblemWayFour(5);

                    for (int i = 0; i < arr.Length; i++)

                    {

                        Console.Write("{0,5}", arr[i].ToString());

                    }

                    Console.ReadKey();

                }

                /// <summary>

                /// 循環判斷隨機出來的數字是否在數組中

                /// </summary>

                /// <param name="total"></param>

                /// <returns></returns>

                public static int[] SolveProblemWayOne(int count)

                {

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

                    Random random = new Random();

                    for (int i = 0; i < count; i++)

                    {

                        int number = random.Next(1, count + 1);

                        while (resultList.Contains(number))

                        {

                            number = random.Next(1, count + 1);

                        }

                        resultList.Add(number);

                    }

                    return resultList.ToArray();

                }

                /// <summary>

                /// 按照順序生成一個數組

                /// </summary>

                /// <param name="total"></param>

                /// <returns></returns>

                public static int[] SolveProblemWaySecond(int count)

                {

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

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

                    for (int i = 0; i < count; i++)

                    {

                        orignalList.Add(i);

                    }

                    int maxIndex = count;

                    Random random = new Random();

                    for (int i = 0; i < count; i++)

                    {

                        //隨機索引

                        int index = random.Next(0, maxIndex);

                        resultList.Add(orignalList[index]);

                        orignalList.RemoveAt(index);

                        maxIndex--;

                    }

                    return resultList.ToArray();

                }

                /// <summary>

                /// 不刪除數據,然后的問題就是給最后的東西賦值

                /// </summary>

                /// <param name="count"></param>

                /// <returns></returns>

                public static int[] SolveProblemWayThird(int count)

                {

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

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

                    for (int i = 0; i < count; i++)

                    {

                        orignalList.Add(i);

                    }

                    int minIndex = 0;

                    Random random = new Random();

                    for (int i = 0; i < count; i++)

                    {

                        //隨機索引

                        int index = random.Next(minIndex, count);

                        resultList.Add(orignalList[index]);

                        //交換,由于索引自減,不需要將隨機的值賦值到最后

                        //int temp = orignalList[index];

                        orignalList[index] = orignalList[minIndex];

                        //orignalList[minIndex] = temp;

                        minIndex++;

                    }

                    return resultList.ToArray();

                }

                /// <summary>

                /// 簡潔方式

                /// </summary>

                /// <param name="count"></param>

                /// <returns></returns>

                public static int[] SolveProblemWayFour(int count)

                {

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

                    for (int i = 0; i < count; i++)

                    {

                        resultList.Add(i);

                    }

                    int minIndex = 0;

                    Random random = new Random();

                    for (int i = 0; i < count; i++)

                    {

                        //隨機索引

                        int index = random.Next(minIndex, count);

                        //頭部交換

                        int temp = resultList[index];

                        resultList[index] = resultList[minIndex];

                        resultList[minIndex] = temp;

                        minIndex++;

                    }

                    return resultList.ToArray();

                }

            }

        }

         本文轉載于(有刪改):http://www.cnblogs.com/xiaofeixiang/p/4234223.html

        Tags:C# 算法

        知識評論評論內容只代表網友觀點,與本站立場無關!

           評論摘要(共 0 條,得分 0 分,平均 0 分) 查看完整評論

        用戶名: 查看更多評論

        分 值:100分 85分 70分 55分 40分 25分 10分 1分

        內 容:

                    請注意用語文明且合法,不要發布帶有攻擊性、侮辱性的言論,謝謝合作!

                 通知管理員 驗證碼:

        關于本站 | 網站幫助 | 廣告合作 | 網站聲明 | 友情連接 | 網站地圖 | 用戶守則 | 聯系我們
        本站部分內容來自互聯網,如有侵權,請來信告之,謝謝!
        Copyright © 2007-2019 biye5u.com. All Rights Reserved.
        網站備案號:黑ICP備13005378號-3
        特黄特色三级在线观看 - 视频 - 在线观看 - 影视资讯 -心晴网