# 在一个范围内生成N个随机和唯一的数字

` `n[0] = rnd(50) for each i in 1..5: n[i] = n[0] while n[1] == n[0]: n[1] = rnd(50) while n[2] == any of (n[0], n[1]): n[2] = rnd(50) while n[3] == any of (n[0], n[1], n[2]): n[3] = rnd(50) while n[4] == any of (n[0], n[1], n[2], n[3]): n[4] = rnd(50) while n[5] == any of (n[0], n[1], n[2], n[3], n[4]): n[5] = rnd(50)` `

` `dim n[50] // gives n[0] through n[9] for each i in 0..49: n[i] = i // initialise them to their indexes nsize = 50 // starting pool size do 6 times: i = rnd(nsize) // give a number between 0 and nsize-1 print n[i] nsize = nsize - 1 // these two lines effectively remove the used number n[i] = n[nsize]` `

` `<------ n[] ------> 0 1 2 3 4 5 6 7 8 9 nsize rnd(nsize) output ------------------- ----- ---------- ------ 0 1 2 3 4 5 6 7 8 9 10 4 4 0 1 2 3 9 5 6 7 8 9 7 7 0 1 2 3 9 5 6 8 8 2 2 0 1 8 3 9 5 6 7 6 6 0 1 8 3 9 5 6 0 0 5 1 8 3 9 5 2 8 5 1 9 3 4 1 1 5 3 9 3 0 5 9 3 2 1 3 9 1 0 9` `

` ` Random random = new Random(); List<int> uniqueInts = new List<int>(10000); List<int> ranInts = new List<int>(500); for (int i = 1; i < 10000; i++) { uniqueInts.Add(i); } for (int i = 1; i < 500; i++) { int index = random.Next(uniqueInts.Count) + 1; ranInts.Add(uniqueInts[index]); uniqueInts.RemoveAt(index); }` `

` `var random = new Random(); var intArray = Enumerable.Range(0, 4).OrderBy(t => random.Next()).ToArray();` `

` ` var intArray = Enumerable.Range(0, 10).OrderBy(t => random.Next()).Take(5).ToArray();` `

` `int firstNumber = intArray[0]; int secondNumber = intArray[1]; int thirdNumber = intArray[2]; int fourthNumber = intArray[3]; int fifthNumber = intArray[4];` `

` `class Program { static int[] a = new int[40]; static Random r = new Random(); static bool b; static void Main(string[] args) { int t; for (int i = 0; i < 20; i++) { lab: t = r.Next(1, 40); for(int j=0;j<20;j++) { if (a[j] == t) { goto lab; } } a[i] = t; Console.WriteLine(a[i]); } Console.Read(); } }` `

7 38 14 18 13 29 28 26 22 8 24 19 35 39 33 32 20 2 15 37