读书人

怎么获得一组不相同的随机数

发布时间: 2012-03-18 13:55:39 作者: rapoo

如何获得一组不相同的随机数

如何获得一组不相同的随机数

int[] nums = new int[200];
Threading.Sleep(1);
Random random = new Random();
for (int i=0; i < nums.Length; i++)
{
for (int j=1; j <= i; j++)
if (nums[i]=nums[j]) { i--; break;}
nums[i]=random.Next(0,200);
}

我大概就知道这么多,求个高效的算法

[解决办法]

C# code
        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--;        }
[解决办法]
C# code
        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
C# code
            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);
[解决办法]
C# code
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;} 

读书人网 >C#

热点推荐