日期:2014-05-18 浏览次数:20940 次
int[] numbers = new int[100]; for (int i = 0; i < 100; i++) numbers[i] = i; Random rd = new Random(); int index, realLength = numbers.Length, temp; for (int i = 0; i < 100; i++) { index = rd.Next(realLength); Response.Write(numbers[index] + "<br/>"); temp = numbers[index]; numbers[index] = numbers[realLength - 1]; numbers[realLength - 1] = temp; realLength--; }
------解决方案--------------------
List<int> numbers = new List<int>(); for (int i = 0; i < 100; i++) numbers.Add(i); Random rd = new Random(); int index; for (int i = 0; i < 100; i++) { index = rd.Next(numbers.Count); Response.Write(numbers[index] + "<br/>"); numbers.RemoveAt(index); }
------解决方案--------------------
test
int[] result = new int[120]; Random ran = new Random(); int left = 1900, right = 2020; bool[] flag = new bool[right]; for (int i = 0; i < result.Length; i++) { int temp = ran.Next(left, right); left = (temp + 1) == left ? temp + 1 : left; right = (temp - 1) == right ? right - 1 : right; while (flag[temp]) { temp = ran.Next(left, right); } flag[temp] = true; result[i] = temp; } foreach (int i in result) Console.WriteLine(i);
------解决方案--------------------
class Program { static void Main(string[] args) { Console.WriteLine(string.Join(",", new Poker(1900, 2020).Shuffle().ToArray())); Console.WriteLine("press any key to exit."); Console.ReadLine(); } } public class Poker : List<int> { public Poker(int begin, int end) { if (end <= begin) throw new ArgumentException(); this.begin = begin; this.end = end; random = new Random((int)DateTime.Now.Ticks); } public Poker Shuffle() { List<int> source = new List<int>(); for (int i = begin; i <= end; ++i) { source.Add(i); } int? next = null; while ((source.Count > 0) && ((next = Pop(source)) != null)) { this.Add(source[next.Value]); source.RemoveAt(next.Value); } return this; } private int? Pop(List<int> source) { return source.Count > 1 ? random.Next(source.Count) : 0; } private Random random; private int begin, end; }