如题:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
1)、
 int[] intArr=new int[100]; 
 ArrayList myList=new ArrayList();  
Random rnd=new Random();
while(myList.Count<100)
{  
int num=rnd.Next(1,101);  
if(!myList.Contains(num))  
myList.Add(num);
}
for(int i=0;i<100;i++)
  intArr[i]=(int)myList[i];
2)、
int[] arr = new int[100];
Random rd = new Random();
while(arr.Contains(0))
{
int a = rd.Next(1, 101);
if (!arr.Contains(a))
{
arr[a-1] = a;
}
}
for (int i = 0; i < arr.Length; i++)
Console.WriteLine(arr[i]);第一种方法是不用质疑是正确的,但是第二个呢?是否算达到题目的要求呢?

解决方案 »

  1.   

    Random rnd = new Random(Environment.TickCount);
    int[] result = Enumerable.Range(1, 100).OrderBy(i => rnd.Next()).ToArray();这样就满足你要求了。100个元素,1~100.都塞满了。顺序的存入1~100,然后打乱顺序就是你的结果了。
      

  2.   

    大体上我们可能会先产生一组数,然后对数进行随机排序,算法复杂度2n用linq来表示的话,也就一句话的事情
    var res = Enumerable.Range(1, 100).OrderBy(c => Guid.NewGuid());到不是炫耀技巧,只是把一个未知计算步数滴,直接变成了可以预见的2n