首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-03-18 
如何获得一组不相同的随机数如何获得一组不相同的随机数int[] nums new int[200]Threading.Sleep(1)Ra

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

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

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;} 

热点排行