把1-n放到一个数组中,然后取下标
第一次 在1~n中随机取, 把取到的和[n-1]交换
第二次 在1~(n-1)中随机取,把取到的和[n-2]交换
第三次 在1~(n-2)中随机取,把取到的和[n-3]交换
...
到第m次 在1~(n-m+1)中随机取,把取到的和[n-m]交换这个数组中的后面m个就是你要的随机数

解决方案 »

  1.   

    取出的随机数能重复么?如果能,试试Random r = new Random();
    for (int i=0; i < m; i++)
    {
       Response.Write(r.Next(1,n));
    }
      

  2.   

    http://www.pconline.com.cn/pcedu/empolder/net/10204/51896.html
      

  3.   

    jasper_liu(波仔) 你这个应该就能解决了,谢谢了
      

  4.   

    int numbers[n];// 初始化数组
    Random r = new Random();
    for (int i=0; i < n; i++)
    {
       numbers[i] = r.Next(1,n);
    }int tmp,p;
    // 取随机数
    for(int i=0; i<m; i++)
    {
      p = r.Next(1,n-i);
      // swap numbers[p] and numbers[n-i-1]
      tmp = numbers[p];
      numbers[p] = numbers[n-i-1];
      numbers[n-i-1] = tmp;
    }// 你要的不重复的随机数就是数组numbers的后面m个
      

  5.   

    int n=100,m=90;
    ArrayList list = new ArrayList();
    Random r = new Random();while( list.Count<m )
    {
    r.Next(1,n);
    if( !list.Contains(r) )
    list.Add( r );
    }int[] values = (int[])list.ToArray( typeof(int) );
      

  6.   

    to timmy3310(tim):
    这种算法效率会较低一点,
    因为判断list.Contans(r)需要消耗时间,尤其是当m,n比较接近(n比较大)
    很容易就产生了现在取到的随机数包含在以前取到的随机数内。正因为这样,所以采用了随机取下标、再交换的方法