比如说在1-200以内,产生50个不重复的随机数,有没有直接的方法,而不需要把得到的一个个随机数拿来比较。

解决方案 »

  1.   

    大小为200的数组sa,
    sa[1] = 1; ..... ;sa[200]=200;
    i = 200;(1) 产生[1,i]上的随机数r
    (2) swap( sa[r], sa[i] )
    (3) i--
    (4) if (i!=150) goto (1)sa[151]~sa[200]即为所求
      

  2.   

    int n;
    int j[50]
    n=200;
    int m;
    int a[n]={1,2,3,4,~~~~~~~~~~200};
    n-=1;
    for(int i=0;i<50;i++)
    {j[i]=a[rendom()*n];a[rendom()*n]=a[n];n--}
    写的有点乱,但是应该能达到目的
      

  3.   

    public class a2 
    {
    public static void main(String[] args)
    {
    int n;
    n=200;
    int[] j=new int[50];
    int[] a = new int[n];
    for (int i =0;i<200;i++)a[i]=i+1;
    for(int i=0;i<50;i++)
    { j[i]=a[(int)(Math.random()*n)];
                        a[(int)(Math.random()*n)]=a[n-1];
                        n--;
                       }
    }
    }
    那天写的太匆忙,写错了不少地方,今天补一下
      

  4.   

    这样a[(int)(Math.random()*n)]=a[n-1];做了就不用比较了吧