指定范围数字 生成随机序列 数字不连续
例如:范围【1-5】 输入 1 3 5 2 4
Stopwatch sp = new Stopwatch(); sp.Start();//开始计时 foreach (var item in GetRandomList(9999, 10000)) { Console.WriteLine(string.Format("{0}", item.Value.ToString())); } sp.Stop(); Console.WriteLine(String.Format("耗时{0}", sp.ElapsedMilliseconds)); Console.Read();
RmNum<RmNext 下面这种算法计算是无压力的
/// <summary> /// 指定范围数字 生成随机序列 数字不连续 /// </summary> /// <param name="RmNum">随机序列个数</param> /// <param name="RmNext">范围</param> /// <returns></returns> public static Dictionary<int, int> GetRandomList(int RmNum, int RmNext) { Dictionary<int, int> dictionary = new Dictionary<int, int>(); Random rm = new Random(); for (int i = 0; dictionary.Count < RmNum; i++) { int nValue = rm.Next(1, RmNext); if (i == 0) { dictionary.Add(i, nValue); } if (!dictionary.ContainsValue(nValue)) { ArrayList arrayList = new ArrayList(); foreach (var item in dictionary) { arrayList.Add(item.Value); } if (dictionary.Count > 0) { if (Math.Abs(Convert.ToInt32(arrayList[arrayList.Count - 1]) - Convert.ToInt32(nValue)) > 1) { dictionary.Add(i, nValue); } } } } return dictionary; }
RmNum<RmNext 下面这种算法,如果RmNum和RmNext趋近的时候就会出现效率问题
/// <summary> /// 指定范围数字 生成随机序列 数字不连续 /// </summary> /// <param name="RmNum">随机序列个数</param> /// <param name="RmNext">范围</param> /// <returns></returns> public static List<int> GetRandomListNew(int RmNum, int RmNext) { int[] array = new int[RmNext]; List<int> List = new List<int>(); for (int i = 0; i <= array.Length - 1; i++) { array[i] = i + 1; if (i == 0) { List.Add(array[i]); } } for (int i = 0; List.Count < RmNum; i++) { if (!List.Contains(List[List.Count - 1])) { if (List.Count > 0) { if (Math.Abs(Convert.ToInt32(List[List.Count - 1]) - Convert.ToInt32(List[List.Count])) > 1) { List.Add(List[List.Count - 1]); } } } } return List; }
当RmNum=RmNext 时候两种算法都会计算很长时间,甚至计算不出来,当时试着用hashtable,hashtable 可以存储但是是无序的,于是就用了Dictionary。
指定范围数字,生成随机序列,数字不连续,我这个只是随机把一种组合打印出来,如果把所有组合都打印出来该怎么办???范围【1-5】 1 5 2 然后是不是就死循环了?
求大神解惑!!!
时间: 2024-10-09 03:48:33