to In355Hz  panda_w斑竹:
    愿你们能解答我的问题...

解决方案 »

  1.   

    什么是互相独立?
        我只是有一个数组, 如a[15] 你给它赋值,不能重复,可能:a[0] =0 ;
    a[1] = 14, a[2] = 9...
      

  2.   

    to ggyy:
       你有更好的方法吗?
      

  3.   

    相互独立就是哥哥元素不相干!
    B[N]={1,...N-1};
    int n=rand()%N;
    int m=rand()%N;
    A[m]=B[n];
    for(int i=0,i<m;i++)
      A[i]=B[n+i];for(i=m;i<N;i++)
    A[i]=B[i-m];
    可以吗?
      

  4.   

    B[N]={1,...N-1};

    B[N]={0,...N-1};
      

  5.   

    for(i=m;i<N;i++)
    A[i]=B[i-m];

    if(m+1<N)
    {
    for(i=m+1;i<N;i++)
    A[i]=B[i-m-1];
    }
      

  6.   

    for(int i=0,i<m;i++)
      A[i]=B[n+i];是:
    for(int i=0,i<m;i++)
      A[i]=B[n+i+1];
    不好意思!
    老是高错下标!!!!
      

  7.   

    你用了rand(),这就可以解决问题吗?不知道效率怎么样?
      

  8.   

    to ggyy:
       我大概能明白你的意思,好像只要产生一个随机数n,数组里其它的值也都改变了,是不是随机得不够,不知道我看懂你的代码没有?
    to fxxxf:
       能够详细一些吗? 我有点笨...
    我这一切,只是为了模仿扫地雷的游戏...
      

  9.   

    可以这样:
    1.首先创建一个动态数组b[N],其中b[n]=n;
    2.然后生成一个0到N-1间的随机数m,赋值a[0]=b[m];
    3.把b[m]这个元素删掉(动态数组嘛),现在数组b只有N-1个元素了。
    4.重复以上过程依次给a数组各元素赋值就可以了。
      

  10.   

    其实就是顺序给数组赋值,再随机的打乱数据顺序。
    只是打乱方法可以变变:
    int a[N];
    int b,c;
    for(j=0; j<打乱次数; j) {
       for(i=0;i<N;i++) {
          b = rand()%N;
          c = a[i];
          a[i] = a[b];
          a[b] = c;
       }
    }
    如果一次不够乱,可以多打几次。时间复杂度(打乱次数*N)应该比你的方法(至少是N^2/2)快。
      

  11.   

    有点错,再重贴一遍:
    int a[N] = {0,1,...,N-1};
    int b,c;
    for(j=0; j<打乱次数; j) {
      for(i=0;i<N;i++) {
          b = rand()%N;
          c = a[i];
          a[i] = a[b];
          a[b] = c;
      }
    }
      

  12.   

    是在发牌吧,我想就是在剩余的牌中随机抽出一张牌。直到抽完。int N=10;
    int *a=new int[N];
    int ai=0;
    CArray<int,int> b;
    for(int i=0;i<N;i++){
    b.Add(i);
    }
    srand(time(NULL));
    while(b.GetSize()){
    int n=rand()%N--;
    a[ai++]=b[n];
    b.RemoveAt(n);
    }
    以上代码我试了一下。速度不成问题。
      

  13.   

    In355Hz(好象一条狗):
    你的算法虽然增加的次数,但还是rand函数的伪随机数,不能改善随机效果。真正的随机数有几种方式实现:
    1、找一个大的文件,然后用des处理,然后read word, 读出的序列是真正的随机数
    2、用SYSTEMTIME的millionSeconds每天生成一个序列,然后对rand产生的数组进行两两交换[email protected]
      

  14.   

    产生一列个数等于N的随即数列,用快速排序法给这数列排序,然后按顺序把数列中每一个元素在这排序中的名次作为它的内容,如:若a[i]是第y名,那么我们就使a[i]=y我想这应该是很直观的算法了
      

  15.   

    to tipbridge(asd) :
    与你探讨“真正的”随机数的问题。
    我们用的计算机,都无法产生真正的随机数,这是由硬件特性决定的。
    第一个例子,只要文件相同,最后得到的结果是一样的。
    第二个例子,非但精度有限,而且,每天只能得到一个随机数?
    产生真正的随机数是很麻烦的。
    比如,比较“牛”的是,通过监测原子核衰变放出的粒子数来产生随机数。至少,我们认为弱相互作用是随机的,不受任何外界因素制约。
    还比如,利用温度等物理量,转换方法之后得到随机数,但随机性能就不如上面那种了。有的ic卡中是这么做的。