首 页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 suansuo.cn. All Rights Reserved.
网站备案号:黑ICP备13005378号-3
烟的利润是多少比例,一盒香烟的成本大约是多少?_参雄股票网中国居民负债率是多少,中国地方政府的巨额债务是怎么形成的?_册篡股票网金融股包括哪些板块,牛市发展路径及板块轮动规律_侧戳股票网原始股东减持要求,低税率股权转让、自然人减持、税收优化、财政扶持_策焯股票网底部打压吸筹盘中表现,庄家吸筹分布全程曝光,死记“三大吸筹手法”,及时出手,随时暴涨_策纂股票网h股什么意思与a股的区别,a股和h股同时上市,原股东的股票在哪儿交易?_册谆股票网外债负债率怎么算,女,25岁,负债3万,工作不稳定,如何规划以后的道路?_测枞股票网分时成交量怎么看,如何从成交量,换手率,当日K线路径,内外盘之间的关系看出庄家出货或骗散户来接盘?_策爪股票网银行间债券市场是资本市场吗,请业内人士普及一下商业银行在资本市场上的业务模式怎样划分,自营,代客,做市,对冲等?股票流通市场名词解释,有哪些必须掌握的股市术语?资本市场线描述的是有效证券组合,资本市场线的意义是什么?短期债券市场属于货币市场吗,江苏银行为何在 2015 年 7 月银行间债券市场做市业务情况中排名第一?换手率高放量涨停说明什么,股票放量涨停应不应该卖出?换手率不超过0.50,港股投资逻辑与港股基金推荐股票交易换手率多少好?量比多少好?,在股票交易中,强势股能选出来,为什么我总买不到?股票持仓多久可以卖,持有股票多长时间能分红?微信可以股票交易吗,那个证券交易软件可以自动交易?股票持有多久卖出最好,每次习惯只持有一支股票好吗?是否应该分摊风险多持有几只?股价和换手率关系,怎样通过换手率和量比来看买卖点?腾讯自选股手机客户端,求问大神们,微证券怎么样?和腾讯自选股有什么区别?换手率选股,证券的选股范围可能超出市场预期蓝筹股通常指什么股票,蓝筹股有哪些?怎么选?a股哪些是蓝筹股,A股未来的10倍股,会出自什么方向?有哪些10倍股?股市老三板什么意思,能用一篇文章讲清楚新三板是什么吗?行业龙头蓝筹股,中字头蓝筹股是2017年投资的重要方向支付印花税的会计分录怎么做,印花税以应纳税凭证所记载的金额、费用、收入额和凭证的件数为计税依据?印花税征税依据含税吗,印花税是按销售额的80%还是70%,?交注册资金印花税怎么做分录,应交税费有关会计分录大全!收藏起来!以后工作用得上!小规模印花税申报,小规模纳税人每个月都要申报吗?汽车保险费税率是多少,今年我的车第三年交保险,保单上面显示一千七百多,实际交了两千多,是怎么回事?